Store locator

on my website

Address autocomplete

in form / checkout

Route optimizer

multi-stop delivery

Delivery zone check

at checkout

Verify agent visit

proof of location

Google Maps bill

too high, want out

Mapsi API

what you actually need

Multi-stop routing API. Send up to 25 waypoints and get back total distance, duration, per-leg breakdown, and a GeoJSON LineString of the full route.


integration path

1
Create a free Mapsi account
Route API is available on all plans. Free tier rate limit: 2 req/sec, 1,000 calls/day.
2
Geocode your stop addresses if you only have strings
GET /v1/geocode?q={address} — cache the results. Don't re-geocode on every dispatch run.
3
POST your waypoints to /v1/route
Send an ordered array of {lat, lon} stops — first is origin, last is destination. Add 'mode' for bike or pedestrian routing.
4
Use the response to guide your drivers
result.polyline is a GeoJSON LineString — pass it directly to MapLibre. result.legs gives per-segment distance and time.

integration guide

// Multi-stop delivery route
const res = await fetch('https://mapsi.dev/v1/route', {
  method: 'POST',
  headers: { 'X-API-Key': 'YOUR_KEY', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    waypoints: [
      { lat: 12.9716, lon: 77.5946 },  // depot
      { lat: 12.9611, lon: 77.6413 },  // stop 1
      { lat: 12.9342, lon: 77.6195 },  // stop 2
      { lat: 12.9780, lon: 77.5730 }   // stop 3
    ],
    mode: 'auto',   // or 'motor_scooter', 'bicycle', 'pedestrian'
    units: 'km'
  })
});
const data = await res.json();

console.log(data.distance_km);    // 18.4
console.log(data.duration_sec);   // 2340

// Per-leg breakdown
data.legs.forEach((leg, i) => {
  console.log(`Leg ${i+1}: ${leg.distance_km}km, ${leg.duration_sec}s`);
});

// GeoJSON geometry — pass directly to MapLibre
// map.addSource('route', { type: 'geojson', data: data.polyline })
Watch out: Max 25 waypoints per request. For larger delivery runs, split into batches of 25 and chain the routes. Also note: /v1/route returns the ordered route as-given — it does not reorder stops for you. For optimal ordering you need the Matrix API.

1 API call per route. A fleet of 20 drivers at 2 runs/day = 40 calls/day — negligible. Growth plan covers 35,000 calls/day.