Vendor Setup — Drover & Luna
Sidewalk detection requires on-vehicle hardware. Levy Vision integrates with Drover AI PathPilot (primary) and Luna Systems (alternate, stronger in EU). This article walks you through the procurement → install → provisioning → verification pipeline for both. We also cover Captur.ai at the end — Captur supplies a parking-pose classifier, not sidewalk hardware.
If you're not running sidewalk detection at all, skip this article — helmet and parking-pose work without any vendor hardware.
Choosing a vendor
| Vendor | Best for | OEM coverage | Approximate cost |
|---|---|---|---|
| Drover AI | US fleets, broad OEM coverage including OKAI ES400/ES600, Segway Max, NIU KQi | Most | $5–15/device/month + ~$300/device upfront |
| Luna Systems | EU fleets, mature platform, stronger Dott/Voi heritage | Most | Comparable, regional pricing |
| Captur.ai | Parking-pose only (no sidewalk) | N/A | Per-API-call pricing |
Cost ranges are estimates from public reporting. Your actual quote comes from the vendor in your commercial conversation. Contact your Levy account manager to get an intro.
Step 1 — Sign the vendor agreement
Both Drover and Luna require a paper agreement before they'll provision devices for you. Levy doesn't resell their hardware — you buy direct, we integrate via webhooks.
What you'll need from the vendor:
- API key for their provisioning API
- Webhook signing secret (per subaccount preferred)
- Device serials for the units you're installing
- OEM compatibility list for your specific scooter/bike models
For sidewalk detection on OKAI ES400 specifically, confirm with the vendor that mid-ride speed-cap works on your hardware version — older ES400 firmware doesn't accept HBLB speed commands reliably.
Step 2 — Install hardware on vehicles
This is mechanical work and varies by vendor and vehicle model. The vendor will provide install guides; Levy support has install notes for common combinations (Drover + Segway Max Plus, Drover + OKAI ES400, Luna + most scooters).
Practical tips:
- Pilot 5–10 vehicles before installing the whole fleet. Hardware DOA rates run 2–5% on first install.
- Take photos of every install — useful if a unit acts up later and you need to file a vendor RMA.
- Note each device serial and which vehicle it went on. You'll enter these into Levy in step 3.
Step 3 — Provision devices in Levy
Open Dashboard > Safety > Vendor devices. The page shows every provisioned device for your subaccount.
To add a new one:
- Click Provision device.
- Pick the vendor (
droverorluna). - Enter the device serial (from the vendor).
- Pick the vehicle from the dropdown (only vehicles in your subaccount appear).
- Click Save.
Behind the scenes, this writes a row to cv_vendor_devices linking the vendor serial to the vehicle UUID. When events flow in from the vendor webhook, we use this mapping to attribute the event to the right vehicle and ride.
You can do this in bulk by uploading a CSV (device_serial,vehicle_uuid) — useful for fleet-wide rollouts of more than ~20 devices.
Step 4 — Configure the webhook secret
Open Dashboard > Safety > Safety settings and find the Webhook signing secret field. Paste the secret you got from the vendor.
Why per-subaccount? Different operators on your platform may use different vendors with different secrets. Storing it per-subaccount means we verify each incoming webhook against the right key.
Once saved, this secret is encrypted at rest. It is never logged, never returned via the API, and you can rotate it any time without affecting events that have already been ingested.
Step 5 — Tell the vendor where to send events
Give the vendor these webhook URLs:
| Vendor | Webhook URL |
|---|---|
| Drover AI | https://fleets.levyelectric.com/api/webhooks/drover/events |
| Luna Systems | https://fleets.levyelectric.com/api/webhooks/luna/events |
| Captur.ai (parking results) | https://fleets.levyelectric.com/api/webhooks/captur/result |
Also tell them to include your subaccount ID in the X-Levy-Subaccount-Id header on every request. Without it, we fall back to the global webhook secret, which is less secure for multi-tenant setups.
For HMAC signature scheme:
- Drover — header
X-Drover-Signature: t=<unix_ts>,v1=<hmac_sha256_hex>over body - Luna — header
X-Luna-Signature: <hmac_sha256_hex>over body - Captur — header
X-Captur-Signature: <hmac_sha256_hex>over body
The vendor docs explain how their SDK signs requests. We verify the signature on every request and reject mismatches with 401.
Step 6 — Verify the pipeline
Trigger a test event from the vendor side. Drover and Luna both have a "send test event" feature in their dashboard.
- Trigger a test event for one provisioned device.
- Within a few seconds, you should see a row in Safety > Events with
event_type=sidewalk_entryandsource=drover(orluna). - The side-effects column should be empty (test events don't fire policy by default).
If the event doesn't appear:
- Check the Vendor devices page — does the serial-to-vehicle mapping exist?
- Check the Troubleshooting article — the "no sidewalk events" diagnosis tree covers webhook failures.
- Check Sentry if you have access — vendor webhook signature failures log there.
Step 7 — Turn on enforcement
Once events are flowing reliably for a week, you're ready to flip enforcement on. Open Safety > Safety settings:
- Toggle Sidewalk detection enabled to on
- Leave Throttle cut enabled off for the first month — enforce with warn + speed reduce only
- Set thresholds per Throttle-cut policy
Review the Sidewalk hotspots page weekly. Add geofence allow-list polygons for any clear false-positive zones (protected bike lanes, plazas your city permits).
Captur.ai (parking-pose only)
If you want a premium parking-pose classifier instead of Gemini, Captur.ai is the option. Setup is simpler — no hardware:
- Sign the Captur.ai agreement, get API key.
- Open Safety > Safety settings and set Parking classifier to Captur.
- Paste the API key (Levy support adds it as an env var on your behalf; this is not exposed in the dashboard for security reasons).
- Next parking photo runs through Captur instead of Gemini.
Captur runs asynchronously — the rider doesn't wait. The result comes in via webhook at /api/webhooks/captur/result and updates the parking_validations row.
Renewing or rotating credentials
If a vendor rotates your API key or signing secret:
- Get the new credentials from the vendor.
- Update the value in Safety > Safety settings (signing secret) and contact Levy support for the API key.
- Verify the next incoming event still parses (signature verify is the most likely failure point).
There's no downtime if you do it carefully — incoming events with the old secret are rejected during the window while the new secret is in place. Most operators schedule rotations during a low-traffic hour.
What if a vendor goes down?
If the vendor's pipeline stops sending events for more than 5 minutes during peak ride hours, Sentry alerts our team and we auto-disable enforcement for your fleet until events resume. The dashboard shows a banner reading "Sidewalk detection paused — vendor outage detected" so you know what's happening.
When the vendor comes back online, enforcement resumes automatically. No action needed from you.