A map and directions API that keeps the trip to itself.

Put a world map on your website and ask for walk, bike, drive and transit directions from your backend. The map files, the route engines and the key check all run on Carpathian's own map server, built on OpenStreetMap data, so no third-party map provider sees where your users are or where they are going.

maps.carpathian.ai / v1 / route
shell / request
curl https://maps.carpathian.ai/v1/route \
  -H "Authorization: Bearer $MAPS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"origin":{"lat":41.5868,"lng":-93.625},
       "destination":{"lat":41.6005,"lng":-93.6091},
       "mode":"transit"}'
json / response
{
  "route": {
    "mode": "transit",
    "duration_s": 1500,
    "distance_m": 4551,
    "path": [[41.5868, -93.625], [41.5871, -93.6249]],
    "steps": [
      { "instruction": "Walk to 6th Ave & Keo Way", "travel": "walk" },
      { "instruction": "Take 6 to DART Central Station", "travel": "bus", "line": "6" }
    ]
  }
}
A world map
Drawn in the browser with MapLibre from map files that are never billed
Directions
Walk, bike, drive and transit routes with steps, from your backend
Travel-time areas
Everywhere reachable from a point in up to four travel times
A key per app
Its own websites, limits and key, rotated in under a minute

What you can build with it

The map and the directions work separately, so a store locator can use only the map and a delivery quote can use only the API.

A map on your site

The map is drawn in the browser by MapLibre GL JS from public map files, styled with the Protomaps basemap in light, dark, white, grayscale or black. It covers the whole planet, each tile is cached in the browser for a day, and the map files load nothing from another company. List your website on an app and the map draws on the next page load.

Directions

Send two points and a mode, and get back the time in seconds, the distance in meters, the path to draw and one step per instruction, with an arrow hint for each turn. Transit answers name the line and the departure time, and include the walk to and from the stops.

Travel-time areas

Send one point and up to four travel times, and get back the area someone can reach in each, as GeoJSON you can fill on the map. It is what you reach for when a page says within 15 minutes of you, or when a delivery zone should follow the roads instead of a circle.

Map files
Never billed, however many visitors load your map
Directions
Free up to a monthly allowance, then billed per 1,000
Per-app limits
Requests a minute and a day, set by you
No coordinates logged
The map server keeps the request, never the trip

Keys and websites, one app at a time

You create an app in Carpathian for each website or service that uses the map. Each app gets its own key, starting cmk_, shown once when you create it. Carpathian keeps only a hash of it, and the map server checks every request against a signed list of those hashes that it fetches every minute.

A browser may load the map files only from a website listed on one of your apps, so another site cannot embed your map and run up your usage. Directions need the key, which stays on your backend: your page asks your server, and your server asks Carpathian Maps.

Rotating a key or deleting an app takes two-factor authentication, and the old key stops working within a minute on every map server.

  • A separate key, website list and limits for every app
  • A request a minute and a request a day ceiling, answered with 429 past either
  • A spend cap that pauses your keys instead of running past it
  • Viewing, managing and deleting granted to different people
carpathian.ai / dashboard / maps access
  • View
    See the organization's map apps, the websites each one lists, and their usage
  • Manage
    Create apps, change their websites and limits, and rotate their keys
  • Delete
    Remove an app, after which its key stops working within a minute

What the map server keeps

A directions request carries where someone is and where they are going. That is the part a hosted map provider would otherwise hold.

Coordinates travel in request bodies only. The map server logs the method, path, status and time of each request, never a body, a coordinate or a query string, and the route engines run beside it without being reachable from the network. Carpathian's platform sees how many requests each app made each day, by kind, for the usage page and the invoice.

Turn-by-turn navigation built on Carpathian Maps contributes anonymous traffic data: how long each stretch of road took, the travel mode and a 15-minute window of the week, with no account, key, device, start or destination. Section 24 of the Terms of Service covers it, and an app that offers navigation should say so in its own privacy notice.

What it does not do

There is no address search. Carpathian Maps answers coordinates with routes and areas, so an app where people type an address needs a geocoder in front of it.

Directions cover the areas and transit agencies in the coverage list on the documentation's overview page. A point outside them answers that no route was found, while the map itself still draws there.

Labels are in English, and the styles are the Protomaps basemap's own. You can restyle the map in your own MapLibre code, but that style is then yours to maintain.

maps.carpathian.ai / limits
  • Travel times
    1 to 4 per area request, each from 1 to 120 minutes
  • Modes
    walk, bike, drive and transit
  • Request body
    Up to 4 KB of JSON
  • Credit
    The OpenStreetMap credit stays visible on every map

Questions we get asked

What does Carpathian Maps include?
A world map you draw on your own site with MapLibre, and a directions API your backend calls for walk, bike, drive and transit routes and for the areas reachable from a point within a travel time. Both are served from Carpathian's own map server at maps.carpathian.ai.
What does it cost?
The map files are never billed. Route and travel-time requests are free up to a monthly allowance for your organization, then billed per 1,000 on your monthly invoice at the rate on the Carpathian Maps service page. Requests the server fails to answer on its side do not count.
Who sees where my users are going?
Nobody outside Carpathian's map server. Coordinates travel in request bodies, and the server logs the method, path, status and time of a request, never a body, a coordinate or a query string. Carpathian sees how many requests each app made each day, by kind, for the usage page and the bill.
Can another site embed my map on my account?
No. Each app lists the websites allowed to load its map, and a browser on any other website is refused. Directions need the app's key, which belongs on your backend and never in browser or mobile code.
What happens if a key leaks?
Rotate it. The old key stops working on the map server within a minute, and rotating a key or deleting an app needs two-factor authentication. Each app also has its own limit of requests a minute and a day, so a leaked or looping key cannot run past what you set.
Where do directions work?
The map covers the whole planet. Walk, bike and drive directions cover the areas listed in the coverage section of the documentation, and transit covers the agencies listed there. A point outside them answers that no route was found.
Does it turn addresses into coordinates?
No. Carpathian Maps answers coordinates with routes and areas. If your users type addresses, you need a geocoder to turn them into latitude and longitude first.

Put a map on your site.

Create an account, add a payment card, turn on Carpathian Maps from Services, and create an app with your website listed. The map files are never billed and directions are free up to a monthly allowance, so you can build the whole thing before the first invoice line appears.

Private Maps and Directions API | Carpathian Maps