intermediate
MDS
GBFS
compliance

Levy Compliance Overview

What Levy Compliance does, how MDS 2.0 Provider, GBFS 3.0, city Policy ingestion, and real-time enforcement fit together for permitted operators.

Levy Fleets TeamMay 18, 202612 min read

Levy Compliance Overview

Levy Compliance is the bridge between your fleet and the city regulators that grant your operating permit. It implements the Mobility Data Specification (MDS) 2.0 Provider and Policy APIs, publishes a GBFS 3.0 feed alongside the legacy 2.x feed, ingests each city's published Policy feed, materializes the resulting geofences with the correct priority, and dispatches per-OEM speed-limit commands to your vehicles within seconds of a rule activating.

Who this is for

Operators that hold (or are applying for) a city permit. Cities increasingly require MDS 2.0 Provider conformance, a GBFS 3.0 feed, and demonstrable real-time enforcement of Policy rules. Levy Compliance handles all three out of the box.

What ships in the box

CapabilityWhat it does
MDS 2.0 Provider APISigned endpoints at /api/mds/{subaccountId}/provider/v2/* covering vehicles, status, trips, events, telemetry, stops, and reports. JWT (RS256) signing, JWKS publication, cursor pagination, edge caching.
GBFS 3.0 feedPublic feed at /api/gbfs/v3/{subaccountId}/* with manifest.json, system_regions.json, vehicle_status.json, and geofencing_zones.json (with vehicle_type_id per rule).
Policy ingestionHourly diff + every-minute polling cron that pulls each jurisdiction's Policy feed, validates it with Zod, short-circuits on unchanged sha256, and stages rules for activation.
Stacked geofencesA 6-tier priority ladder unifies city policy zones, operator zones, and system defaults so the strictest rule wins at each point on the map.
Real-time enforcementWhen a Policy rule activates, vehicles inside the geometry receive a per-OEM speed-limit command (OKAI •••••sign in, Segway •••••sign in, Omni •••••sign in, Queclink •••••sign in, ZIMO MQTT param) tagged with a sha256 idempotency key.
City portalMagic-link login at /city/{slug} for city contacts. Bounded by the jurisdiction's geometry — they only see fleet, trips, and corrals inside their boundary.
Digest emailsHourly cron that emits daily, weekly, or monthly compliance digests to each city_contacts row whose cadence window has elapsed.
Operator dashboard/dashboard/compliance with jurisdictions index, policy diff viewer, audit log, enforcement events, and the override/conflict alert banner.

The compliance loop

              +---------------------------+
              | City policy CMS (Populus, |
              | Lacuna, custom feed)      |
              +-------------+-------------+
                            | poll every 60s
                            v
+---------------------------+----------------------------+
|                Levy Compliance Service                 |
|                                                        |
|   parse + validate (Zod)                               |
|        |                                               |
|        v                                               |
|   sha256 short-circuit -- unchanged? exit              |
|        |                                               |
|        v                                               |
|   upsert mds_policies / mds_policy_rules               |
|        |                                               |
|        v                                               |
|   materialize policy_geofences (PostGIS)               |
|        |                                               |
|        v                                               |
|   on start_date: fan out per-OEM speed commands        |
|        |                                               |
|        v                                               |
|   log to policy_enforcement_events                     |
+---------------------------+----------------------------+
                            |
              +-------------+-------------+
              v                           v
     [Vehicles via IoT proxy]   [GBFS 3.0 + MDS Provider]

How it differs from operator zones

Operator zones (parking, no-go, slow, ride zones) still work the way they did before. Levy Compliance adds a second tier of zones — policy geofences — that are imported from a city Policy feed and stamped with a higher priority than anything you create by hand. When the two overlap, the city rule wins.

You will see this in two places:

  1. Conflict banner on /dashboard/compliance — surfaces every operator zone currently shadowed by a city policy.
  2. Audit log on each jurisdiction page — every ingestion run is recorded with a JSON diff, so you can see exactly which rules were added, removed, or modified between polls.

Sales narrative — "Levy handles your permit"

The operational story we tell cities (and that you can lean on in permit applications):

  1. Operator submits permit application. We hand you the MDS endpoint URLs, the JWKS URL, and the GBFS 3.0 root.
  2. City approves the permit. You configure the jurisdiction in /dashboard/compliance/new with the city's Policy feed URL.
  3. Within minutes, geofences are live. The policy poller pulls the feed, validates it, and materializes the geofences.
  4. Real-time enforcement is on by default. Vehicles inside a slow-zone get the speed-limit command in under 10 seconds (target p95).
  5. Digest emails flow to the city. Daily/weekly/monthly compliance reports land in the city contact's inbox automatically.

Non-goals

Levy Compliance is the operator-side implementation. It is not:

  • A city-side analytics platform — cities still use Populus, Ride Report, Lacuna, or their own dashboard for that.
  • The MDS Agency API — that is the city's responsibility, not the operator's.
  • A replacement for your permit lawyer or your insurance broker.
  • A city policy authoring UI — cities author policies in their own tools and publish via the Policy feed.

What's next

Need help with a specific city?

We've onboarded operators in Long Beach, Boulder, and Minneapolis as launch markets. If your city uses Populus, Ride Report, or Lacuna, the integration is plug-and-play. For bespoke feeds, contact support@levyelectric.com and we'll add the parser branch.