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.
Talk through the movement. Name places as they come — the thread keeps a draft until the chain is ready for Plan.
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.
| Route | Figures | Below them |
|---|---|---|
| Ocean | Distance (nm), sea time, speed basis, chokepoints | Passage list: ports and straits with cumulative nautical miles |
| Road | Distance, drive time, borders | Distance in each country, in order |
| Rail, river | Distance, transit time, borders | Distance in each country, in order |
| North America | US road and rail: miles first, kilometres in brackets; Canada, Mexico and cross-border: kilometres first, miles in brackets | The 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/pngfor image;application/geo+jsonandapplication/vnd.google-earth.kml+xmlfor the map files. - 400 — missing or oversized query, or invalid JSON.
- 422 — place still unresolved. Same
warning,suggestions,draft, andworkingCommandas 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
| Country | Track in NoMap's data |
|---|---|
| United States | 121,274 km |
| China | 75,112 km |
| Russia | 64,256 km |
| India | 48,148 km |
| Canada | 24,969 km |
| Australia | 22,221 km |
| Kazakhstan | 15,590 km |
| Germany | 15,281 km |
| Brazil | 14,784 km |
| Argentina | 14,511 km |
| Ukraine | 12,507 km |
| Poland | 11,315 km |
| Mexico | 11,137 km |
| France | 10,945 km |
| South Africa | 10,863 km |
| Spain | 6,563 km |
| Japan | 6,553 km |
| Iran | 6,532 km |
| Italy | 6,142 km |
| United Kingdom | 5,837 km |
| Sweden | 5,593 km |
| Romania | 5,109 km |
| Pakistan | 4,980 km |
| Hungary | 4,348 km |
| Turkey | 4,344 km |
| Belarus | 4,034 km |
| Algeria | 3,919 km |
| Uzbekistan | 3,703 km |
| Saudi Arabia | 3,635 km |
| Myanmar | 3,576 km |
| Democratic Republic of the Congo | 3,389 km |
| Turkmenistan | 3,337 km |
| Egypt | 2,975 km |
| Thailand | 2,647 km |
| Tanzania | 2,602 km |
| Finland | 2,522 km |
| Cuba | 2,491 km |
| Nigeria | 2,463 km |
| Bangladesh | 2,319 km |
| Zimbabwe | 2,299 km |
| Bolivia | 2,242 km |
| Chile | 2,227 km |
| Mongolia | 2,214 km |
| Mozambique | 2,166 km |
| Angola | 2,088 km |
| Namibia | 2,053 km |
| Bulgaria | 1,977 km |
| Czechia | 1,964 km |
| Indonesia | 1,861 km |
| Zambia | 1,777 km |
| Belgium | 1,710 km |
| Azerbaijan | 1,540 km |
| Iraq | 1,538 km |
| Netherlands | 1,494 km |
| Austria | 1,446 km |
| New Zealand | 1,435 km |
| Serbia | 1,408 km |
| Kenya | 1,358 km |
| Slovakia | 1,344 km |
| Switzerland | 1,309 km |
| Lithuania | 1,297 km |
| Morocco | 1,264 km |
| South Korea | 1,253 km |
| Norway | 1,246 km |
| Vietnam | 1,222 km |
| Croatia | 1,200 km |
| Latvia | 1,190 km |
| Denmark | 1,140 km |
| North Korea | 1,127 km |
| Colombia | 1,109 km |
| Tunisia | 1,070 km |
| Portugal | 1,021 km |
| Ireland | 929 km |
| Uruguay | 920 km |
| Peru | 908 km |
| Syria | 872 km |
| Sri Lanka | 848 km |
| Malaysia | 837 km |
| Greece | 789 km |
| Estonia | 739 km |
| Uganda | 732 km |
| Botswana | 691 km |
| Mauritania | 691 km |
| Cameroon | 626 km |
| Republic of the Congo | 582 km |
| Moldova | 582 km |
| Senegal | 561 km |
| Malawi | 552 km |
| United Arab Emirates | 549 km |
| Côte d'Ivoire | 509 km |
| Ethiopia | 490 km |
| Georgia | 490 km |
| Gabon | 489 km |
| Cambodia | 460 km |
| Slovenia | 450 km |
| Taiwan | 449 km |
| Guinea | 429 km |
| Tajikistan | 397 km |
| Benin | 389 km |
| Israel | 380 km |
| Burkina Faso | 378 km |
| Mali | 342 km |
| Bosnia and Herzegovina | 332 km |
| Armenia | 320 km |
| Ecuador | 294 km |
| Ghana | 292 km |
| Liberia | 284 km |
| Venezuela | 254 km |
| Madagascar | 253 km |
| Kyrgyzstan | 246 km |
| North Macedonia | 221 km |
| Eswatini | 204 km |
| Afghanistan | 180 km |
| Laos | 159 km |
| Dominican Republic | 157 km |
| Albania | 150 km |
| Sierra Leone | 142 km |
| Philippines | 130 km |
| Jordan | 97 km |
| Niger | 88 km |
| Togo | 81 km |
| Luxembourg | 78 km |
| Costa Rica | 74 km |
| Montenegro | 66 km |
| Panama | 47 km |
| Djibouti | 42 km |
| Lesotho | 38 km |
| Jamaica | 29 km |
| Nepal | 15 km |
| Western Sahara | 9 km |
| Hong Kong | 8 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/mcpNo 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
| Tool | Takes | Returns |
|---|---|---|
plan_route | A 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_map | The 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. |
search | A route request in plain language. | One result per plannable route, each with a title, a link and an identifier that fetch can resolve. |
fetch | An 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.