Extract, then plan

Command

Talk through origin, destination, vias, and how it should move. With Review modes on, Command suggests rail, sea, and road before Plan routes. Catalog search still has to identify every place. Plan then charts the sea, rail, and road legs on the existing journey. The same query is a public Command API, and the same routing is available to ChatGPT and Claude through the NoMap Router connector.

Ambiguous names stay on this page with suggestions. Say the next place — or go — when the draft looks right. No invented UN/LOCODEs. Overview only — not navigational advice.

Public API

Command API

The same catalog extraction as this page, without a browser session. GET or POST /api/command with a natural-language query. Catalog search still has to identify every place. No invented UN/LOCODEs. Overview only — not navigational advice.

Open to automated callers: robots.txt allows /api/command, and every reply carries Access-Control-Allow-Origin: * so browser-based agents can read it. No key or session. Rate limited to 10 requests per minute per IP.

format=json

Identified points, suggested modes, calculated sea/land legs, and a Plan link. Default.

format=image

PNG route map of those legs, 2400 × 1600. Add stats for the panel with distances and times.

format=link

Absolute Plan URL and /plan path for the first and last places.

format=geojson · format=kml

The same legs as a map file for GIS tools and Google Earth: one line per leg, one point per place.

Examples

Query is q or query on GET, query or command on POST. map, png, and screenshot also mean image; url means link.

curl -sS "https://ocean.nomap.app/api/command?q=Oakland+to+Qingdao&format=json"
curl -sS "https://ocean.nomap.app/api/command?q=Oakland+to+Qingdao&format=image" \
  -o map.png
curl -sS "https://ocean.nomap.app/api/command?q=Rome+to+Stockholm+via+Paris+and+Berlin&format=image&stats=all" \
  -o card.png
curl -sS "https://ocean.nomap.app/api/command?q=Oakland+to+Qingdao&format=link"
curl -sS "https://ocean.nomap.app/api/command?q=Oakland+to+Qingdao&format=geojson" \
  -o route.geojson
curl -sS "https://ocean.nomap.app/api/command?q=Oakland+to+Qingdao&format=kml" \
  -o route.kml
curl -sS "https://ocean.nomap.app/api/command" \
  -H "content-type: application/json" \
  -d '{"query":"Oakland to Qingdao","format":"json"}'

All parameters

The image with its panel, plus the POST conversation fields. picks, followUp, and prior are how this page continues an unresolved name; they are valid on a resolved query and ignored when unused.

curl -sS "https://ocean.nomap.app/api/command" \
  -H "content-type: application/json" \
  -d '{
  "query": "Oakland to Qingdao",
  "format": "image",
  "stats": "all",
  "picks": [
    {
      "id": "usoak",
      "query": "Oakland",
      "name": "Oakland",
      "country": "United States"
    }
  ],
  "followUp": "by sea",
  "prior": "Oakland to Qingdao"
}'

Open the Rome → Stockholm card · Oakland → Qingdao · map only

The route map

The image is a dark Natural Earth chart with every leg drawn in its mode's line: dotted for sea, amber for road, a cross-tie track for rail. stats=all, or any panel name from earlier versions, adds the panel: the route, its codes and the figures below. stats=none (the default) keeps the map alone. Every figure is NoMap's planning estimate from the calculated legs; a value NoMap does not have is left out.

RouteFiguresBelow them
OceanDistance (nm), sea time, speed basis, chokepointsPassage list: ports and straits with cumulative nautical miles
RoadDistance, drive time, bordersDistance in each country, in order
Rail, riverDistance, transit time, bordersDistance in each country, in order
North AmericaUS road and rail: miles first, kilometres in brackets; Canada, Mexico and cross-border: kilometres first, miles in bracketsThe same in each leg, country and total
Multimodal—Each leg with its distance, and the moving time split by leg (leg times only, no transfer or waiting time)
No route found—Which leg has no route, drawn as dots between its places; no distance or total is given

Map files

format=geojson and format=kml return the calculated legs as a file that QGIS, Google Earth and other map tools open. Each leg is a line with its mode, places and NoMap's distance; each place is a point. A leg NoMap could not route is listed with the reason and has no line. A line that crosses the date line is cut there. For a tool that goes by the name in the address, the same files are at /api/command/nomap-route.geojson and /api/command/nomap-route.kml.

Download Oakland → Qingdao as GeoJSON · KML · Open it in RustGIS

RustGIS is one free tool that reads a file from its address, so a public Command API route opens there in one step. It is an option: the files are standard and NoMap does not depend on it.

Conversation fields

POST can continue an unresolved command the same way this page does. picks are up to six { id, query, name?, country? } suggestion choices. followUp (400 characters) and prior (1,500 characters) carry the next turn and the working command.

Responses

  • 200 — JSON for json/link;image/png for image;application/geo+json andapplication/vnd.google-earth.kml+xml for the map files.
  • 400 — missing or oversized query, or invalid JSON.
  • 422 — place still unresolved. Same warning, suggestions, draft, and workingCommand as this page.
  • 429 — 10 requests per minute per client.

Query maximum is 1,500 characters. Image generation can take up to a minute. Tiles © Esri World Imagery.

Coverage

What NoMap routes on

Routes come from the networks below. When a leg says “no rail route found in NoMap's rail data”, these networks do not connect its places. A railway or waterway may still exist there.

  • Sea: the Marnet sea network, worldwide.
  • Road: OpenStreetMap roads through OpenRouteService's truck profile.
  • Rail: OpenStreetMap rail lines in 131 countries, 646,465 km of track, with gaps. Checked corridors: China–Duisburg Eurasian Rail Freight; China–Aktau–Alat–Georgian Black Sea; China–Pakistan Rail Development Corridor; China–Kyrgyzstan–Uzbekistan Railway; China–Tashkent Central Asia Freight; China–Kazakhstan–Turkmenistan–Iran Freight; Turkmenbashi–Alat–Turkey Rail-Ferry Corridor; Vladivostok / Vostochny–Duisburg Trans-Siberian Rail; Turkey–Greece–Bulgaria–Romania–Hungary Freight Spine; Egypt ENR Delta and Nile Valley Freight.
  • Inland waterways: Danube, Elbe, Grand Canal, Mississippi, Nile, Pearl River, Rhine, Volga, Yangtze. River ports on 484 other waterways are in the catalog, but routes on them are not checked.
Rail track by country
CountryTrack in NoMap's data
United States121,274 km
China75,112 km
Russia64,256 km
India48,148 km
Canada24,969 km
Australia22,221 km
Kazakhstan15,590 km
Germany15,281 km
Brazil14,784 km
Argentina14,511 km
Ukraine12,507 km
Poland11,315 km
Mexico11,137 km
France10,945 km
South Africa10,863 km
Spain6,563 km
Japan6,553 km
Iran6,532 km
Italy6,142 km
United Kingdom5,837 km
Sweden5,593 km
Romania5,109 km
Pakistan4,980 km
Hungary4,348 km
Turkey4,344 km
Belarus4,034 km
Algeria3,919 km
Uzbekistan3,703 km
Saudi Arabia3,635 km
Myanmar3,576 km
Democratic Republic of the Congo3,389 km
Turkmenistan3,337 km
Egypt2,975 km
Thailand2,647 km
Tanzania2,602 km
Finland2,522 km
Cuba2,491 km
Nigeria2,463 km
Bangladesh2,319 km
Zimbabwe2,299 km
Bolivia2,242 km
Chile2,227 km
Mongolia2,214 km
Mozambique2,166 km
Angola2,088 km
Namibia2,053 km
Bulgaria1,977 km
Czechia1,964 km
Indonesia1,861 km
Zambia1,777 km
Belgium1,710 km
Azerbaijan1,540 km
Iraq1,538 km
Netherlands1,494 km
Austria1,446 km
New Zealand1,435 km
Serbia1,408 km
Kenya1,358 km
Slovakia1,344 km
Switzerland1,309 km
Lithuania1,297 km
Morocco1,264 km
South Korea1,253 km
Norway1,246 km
Vietnam1,222 km
Croatia1,200 km
Latvia1,190 km
Denmark1,140 km
North Korea1,127 km
Colombia1,109 km
Tunisia1,070 km
Portugal1,021 km
Ireland929 km
Uruguay920 km
Peru908 km
Syria872 km
Sri Lanka848 km
Malaysia837 km
Greece789 km
Estonia739 km
Uganda732 km
Botswana691 km
Mauritania691 km
Cameroon626 km
Republic of the Congo582 km
Moldova582 km
Senegal561 km
Malawi552 km
United Arab Emirates549 km
Côte d'Ivoire509 km
Ethiopia490 km
Georgia490 km
Gabon489 km
Cambodia460 km
Slovenia450 km
Taiwan449 km
Guinea429 km
Tajikistan397 km
Benin389 km
Israel380 km
Burkina Faso378 km
Mali342 km
Bosnia and Herzegovina332 km
Armenia320 km
Ecuador294 km
Ghana292 km
Liberia284 km
Venezuela254 km
Madagascar253 km
Kyrgyzstan246 km
North Macedonia221 km
Eswatini204 km
Afghanistan180 km
Laos159 km
Dominican Republic157 km
Albania150 km
Sierra Leone142 km
Philippines130 km
Jordan97 km
Niger88 km
Togo81 km
Luxembourg78 km
Costa Rica74 km
Montenegro66 km
Panama47 km
Djibouti42 km
Lesotho38 km
Jamaica29 km
Nepal15 km
Western Sahara9 km
Hong Kong8 km

data/osm-rail-router.json (2026-09-05), OpenStreetMap-derived. Kilometres are routable track in NoMap's network, counted in the country where each stretch lies.

Use it from an AI assistant

NoMap Router

The same route calculation, reachable over the Model Context Protocol. Add the server to ChatGPT, Claude or any MCP client and ask for a route in plain language; the assistant calls the tool and shows the result.

https://ocean.nomap.app/api/mcp

No account, no API key and no sign-in. Nothing is stored between calls: the same request tomorrow is treated exactly like the first one.

Tools

ToolTakesReturns
plan_routeA route in plain language, up to 1,500 characters. Places can be names, UN/LOCODEs, street addresses, coordinates or Google Maps links.The identified places with their UN/LOCODEs where they have one and how each was identified, one leg per hop with mode, distance and duration, a link that opens the route in NoMap, and the URL of the map image. A place that could be several comes back as a choice instead.
route_mapThe same plain-language route, which panels to draw, and whether to embed the image.NoMap's own satellite card with the calculated corridor drawn on it, delivered as a widget the client renders.
searchA route request in plain language.One result per plannable route, each with a title, a link and an identifier that fetch can resolve.
fetchAn identifier returned by search.The full leg breakdown between the places search identified, recalculated on the spot.

All four only read. None of them writes, sends, posts or books anything.

When a place could be several

“Springfield” is a town in five states and two rail stations. Rather than pick one, plan_route returns the candidates with their state or country and position, and the assistant asks you which you mean. Each candidate carries an answer that stands for exactly that place, so your choice lands where you meant on the next call. A request that needs a port between an inland place and one across the sea asks the same way, with the nearest ports.

The map card

Ask to see the route and route_mapreturns NoMap's rendered card: the corridor as calculated, on satellite imagery, with the identified places, distance and transit panels, and an elevation profile. It is drawn from the same routing data the figures come from, so the picture and the numbers agree.

What it does not do

  • No live vessel positions, schedules or tracking. It plans routes between places.
  • No passenger travel, flights or fares.
  • No customs, tariff or regulatory guidance.
  • No bookings, quotes or payments. Nothing is sold through the connector.
  • No invented UN/LOCODEs. A place the catalog cannot identify comes back as a question, with suggestions, rather than a guess.

Limits

Queries are capped at 1,500 characters and calls at 30 per minute per client. Rendering a card can take up to a minute. Distances, durations and cost bands are planning estimates from published network data and stated assumptions — an overview, not navigational advice, and not a freight quote.

What the tools receive, who else it reaches and how long anything is kept is set out in the privacy policy. Tiles © Esri World Imagery. Addresses are found in OpenStreetMap data, © OpenStreetMap contributors.