[{"data":1,"prerenderedAt":605},["ShallowReactive",2],{"footer-learn-links":3,"site-prefooter-cta":16,"learn-\u002Flearn\u002Fbest-routing-api\u002F":24,"related-learn-\u002Flearn\u002Fbest-routing-api\u002F":575,"learn-org-author":593},[4,7,10,13],{"title":5,"path":6},"What Is the Best Routing API?","\u002Flearn\u002Fbest-routing-api",{"title":8,"path":9},"What Is a GDPR-Compliant Mapping API?","\u002Flearn\u002Fgdpr-compliant-mapping-api",{"title":11,"path":12},"What Is Satellite Imagery Resolution?","\u002Flearn\u002Fsatellite-imagery-resolution",{"title":14,"path":15},"What Is Address Autocomplete?","\u002Flearn\u002Faddress-autocomplete",{"id":17,"extension":18,"heading":19,"meta":20,"stem":21,"text":22,"__hash__":23},"site\u002Fsite\u002Fprefooter-cta.yml","yml","Business Outcomes That Fuel Your Growth",{},"site\u002Fprefooter-cta","With Stadia Maps, you build the solutions that matter. Logistics platforms provide accurate ETAs, fleet management apps reduce fuel costs, and emergency dispatch systems improve response times.","XztWiZDFyAC0XCoeYLLQrcyaVmP8uvGWALRS354c9I4",{"id":25,"title":5,"body":26,"category":477,"description":559,"extension":560,"head":561,"image":563,"imageAlt":564,"keywords":564,"meta":565,"modified":564,"navigation":567,"path":6,"published":568,"rawbody":569,"schemaOrg":564,"seo":570,"stem":571,"term":572,"termDescription":573,"__hash__":574},"learn\u002Flearn\u002Fbest-routing-api.md",{"type":27,"value":28,"toc":542},"minimark",[29,33,43,48,91,95,98,148,152,161,240,246,250,253,295,313,317,320,323,327,330,389,393,396,418,434,438,442,447,450,474,478],[30,31,5],"h1",{"id":32},"what-is-the-best-routing-api",[34,35,36,37,42],"p",{},"The best routing API depends on what you are building. A logistics platform routing thousands of trucks has different needs than a hiking app plotting a walking route. Rather than name a single winner, this page walks through what to evaluate when comparing routing APIs, describes what the ",[38,39,41],"a",{"href":40},"\u002Fproducts\u002Frouting-navigation\u002F","Stadia Maps Routing API"," offers, and links to Stadia Maps' own published comparisons for context.",[44,45,47],"h2",{"id":46},"key-takeaways","Key Takeaways",[49,50,51,55,66,77,84],"ul",{},[52,53,54],"li",{},"No single routing API is \"best\" for every use case. The right choice depends on data sources, feature coverage, pricing model, storage rights, and privacy posture.",[52,56,57,58,60,61,65],{},"The ",[38,59,41],{"href":40}," covers turn-by-turn directions, matrix, isochrones, optimized routing, map matching, road information, and traffic-influenced routing under one unified ",[38,62,64],{"href":63},"\u002Fpricing\u002F","credit-based pricing model",".",[52,67,68,69,76],{},"Stadia Maps' routing is built on ",[38,70,75],{"href":71,"rel":72,"target":74},"https:\u002F\u002Fgithub.com\u002Fvalhalla\u002Fvalhalla",[73],"external","_blank","Valhalla",", an open-source routing engine Stadia Maps contributes to.",[52,78,79,83],{},[38,80,82],{"href":81},"\u002Fproducts\u002Frouting-navigation\u002Ftraffic-influenced-routing\u002F","Traffic-Influenced Routing"," adds live and predictive traffic data from TomTom (600M+ connected devices) on top of the same API.",[52,85,86,90],{},[38,87,89],{"href":88},"\u002Fproducts\u002Frouting-navigation\u002Fferrostar-navigation-sdk\u002F","Ferrostar",", Stadia Maps' navigation SDK, is a BSD-licensed, cross-platform (iOS, Android, PWA) SDK with a Rust core.",[44,92,94],{"id":93},"what-makes-a-routing-api-best","What Makes a Routing API \"Best\"?",[34,96,97],{},"Six evaluation dimensions matter for most developer teams:",[49,99,100,107,113,124,130,142],{},[52,101,102,106],{},[103,104,105],"strong",{},"Data sources."," Where the road network, speed limits, and place names come from. OpenStreetMap-based vendors have community-updated data and open licensing. Proprietary vendors have more control over data curation but limited transparency into updates.",[52,108,109,112],{},[103,110,111],{},"Feature coverage."," Does the API include the core primitives you need: turn-by-turn directions, travel time matrix, isochrones, route optimization, map matching, road attributes, elevation, traffic-influenced ETAs?",[52,114,115,118,119,123],{},[103,116,117],{},"Pricing model."," Is billing usage-based (per-request or per-credit) or MAU-based (per active user)? MAU pricing penalizes growth; usage-based pricing scales with actual API calls. Stadia Maps' post ",[38,120,122],{"href":121},"\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F","The Invisible Costs of Routing"," walks through this trade-off in detail.",[52,125,126,129],{},[103,127,128],{},"Storage rights."," Can you cache and persist routing results in your database? Some vendors restrict long-term storage or charge multiples of the request price for it.",[52,131,132,135,136,141],{},[103,133,134],{},"Developer experience."," Availability of SDKs, quality of documentation, code examples, and support. Stadia Maps ships ",[38,137,140],{"href":138,"rel":139,"target":74},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Foverview\u002F",[73],"official SDKs"," for TypeScript, Python, Kotlin, Swift, and PHP, plus platform-specific navigation and search SDKs.",[52,143,144,147],{},[103,145,146],{},"Privacy posture."," Does the vendor track end users, require SDK telemetry, or sell data? For regulated industries (healthcare, finance, government), this can be a hard requirement rather than a preference.",[44,149,151],{"id":150},"what-does-the-stadia-maps-routing-api-offer","What Does the Stadia Maps Routing API Offer?",[34,153,57,154,156,157,160],{},[38,155,41],{"href":40}," provides the following primitives, all served from one API and billed from one unified ",[38,158,159],{"href":63},"credit pool",":",[49,162,163,172,182,191,205,215,224,233],{},[52,164,165,171],{},[103,166,167,65],{},[38,168,170],{"href":169},"\u002Fproducts\u002Frouting-navigation\u002Fturn-by-turn-directions\u002F","Turn-by-Turn Directions"," Reliable routing with precise turn-by-turn guidance, distance, and travel time calculations. Available for driving, walking, cycling, bus, taxi, truck, and more. 20 credits per request.",[52,173,174,181],{},[103,175,176,65],{},[38,177,180],{"href":178,"rel":179,"target":74},"https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Foptimized-routing\u002F",[73],"Optimized Routing"," Ordered stops for multi-point routing (a TSP-style problem). 40 credits per request.",[52,183,184,190],{},[103,185,186,65],{},[38,187,189],{"href":188},"\u002Fproducts\u002Frouting-navigation\u002Fmatrix-routing\u002F","Time\u002FDistance Matrix"," Rapid calculation of travel times and distances between many origins and destinations. 10 credits per element. 625-element limit on the Standard plan; 10,000-element limit on Professional.",[52,192,193,199,200,204],{},[103,194,195,65],{},[38,196,198],{"href":197},"\u002Fproducts\u002Frouting-navigation\u002Fisochrones\u002F","Isochrones"," Reachable areas from a point within a set time or distance. 20 credits per request. See the companion ",[38,201,203],{"href":202},"\u002Flearn\u002Fisochrones\u002F","What Is an Isochrone?"," page for a deeper walkthrough.",[52,206,207,214],{},[103,208,209,65],{},[38,210,213],{"href":211,"rel":212,"target":74},"https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fmap-matching\u002F",[73],"Map Matching"," Snap a GPS trace to the road network. 20 credits per request.",[52,216,217,223],{},[103,218,219,65],{},[38,220,222],{"href":221},"\u002Fproducts\u002Frouting-navigation\u002Froad-information\u002F","Road Information"," Nearest street, speed limits, grades, surface quality, and other road attributes. 20 credits per request.",[52,225,226,232],{},[103,227,228,65],{},[38,229,231],{"href":230},"\u002Fproducts\u002Frouting-navigation\u002Felevation\u002F","Elevation"," Elevation at a point or along a route. 5 credits per request.",[52,234,235,239],{},[103,236,237,65],{},[38,238,82],{"href":81}," Live and predictive traffic on top of the same routing endpoints, powered by TomTom's data from 600 million connected devices. 60 credits per request for adaptive traffic; 120 credits for premium.",[34,241,242,243,245],{},"For mobile apps, ",[38,244,89],{"href":88}," adds real-time navigation with turn-by-turn guidance, powered by the same routing and road information endpoints. Ferrostar is cross-platform (Android, iOS, PWA), uses a Rust core for memory safety and performance, and is BSD-licensed open source.",[44,247,249],{"id":248},"how-does-stadia-maps-routing-compare","How Does Stadia Maps Routing Compare?",[34,251,252],{},"Stadia Maps has published several posts that explain how its approach differs from the routing status quo. Each is grounded in a specific technical or business trade-off, not marketing framing.",[49,254,255,265,275,285],{},[52,256,257,260,261,264],{},[103,258,259],{},"On MAU-based pricing and telemetry."," ",[38,262,263],{"href":121},"The Invisible Costs of Routing: Privacy, Pricing, and Avoiding the \"MAU\" Trap"," explains why most mapping SDKs harvest user data and charge by monthly active user, and how Stadia Maps' usage-based billing avoids both.",[52,266,267,260,270,274],{},[103,268,269],{},"On OSM plus traffic.",[38,271,273],{"href":272},"\u002Fblog\u002Fwhy-osm-routing-needs-real-time-traffic\u002F","Why Basic OpenStreetMap Routing Needs Real-Time Traffic"," explains why raw OSM routing is a static dataset, how algorithmic ETAs fall apart in production logistics, and how Stadia Maps closes the gap with TomTom-powered traffic data.",[52,276,277,260,280,284],{},[103,278,279],{},"On modal-specific routing.",[38,281,283],{"href":282},"\u002Fblog\u002Fbeyond-the-car-routing-for-specialized-fleets\u002F","Beyond the Car: Routing for the Other 90% of Transport"," covers why car-first routing APIs fail trucks, e-bikes, and low-speed vehicles, and how Valhalla plus OSM lets Stadia Maps handle modal-specific constraints.",[52,286,287,260,290,294],{},[103,288,289],{},"On traffic-influenced routing launch.",[38,291,293],{"href":292},"\u002Fblog\u002Ftraffic-influenced-routing-in-public-preview\u002F","Traffic-Influenced Routing Is Here (Public Preview)"," covers the addition of live and historical TomTom traffic to routing, optimized routing, map matching, isochrones, and matrices across 80+ countries.",[34,296,297,298,302,303,307,308,312],{},"For direct vendor-by-vendor migration comparisons, Stadia Maps maintains dedicated switch pages: ",[38,299,301],{"href":300},"\u002Fswitch-to-stadia\u002Ffrom-google\u002F","Switch from Google",", ",[38,304,306],{"href":305},"\u002Fswitch-to-stadia\u002Ffrom-mapbox\u002F","Switch from Mapbox",", and ",[38,309,311],{"href":310},"\u002Fswitch-to-stadia\u002Ffrom-maptiler\u002F","Switch from MapTiler",". Those pages are the authoritative source for pricing and feature comparisons across those specific vendors.",[44,314,316],{"id":315},"what-are-the-major-routing-api-options","What Are the Major Routing API Options?",[34,318,319],{},"The mainstream commercial routing APIs available to developers include Google Maps Platform, Mapbox, HERE Technologies, TomTom, and Stadia Maps. Each has a different data foundation and product focus. Beyond the commercial options, Valhalla (which Stadia Maps contributes to) is a leading open-source routing engine that can be self-hosted.",[34,321,322],{},"Because vendor pricing and features change frequently, the most reliable way to compare specifics is to check each vendor's own pricing and API reference pages at the time you evaluate. Stadia Maps' Switch pages linked in the previous section are the current, maintained source for detailed pairwise comparisons.",[44,324,326],{"id":325},"which-routing-api-is-best-for-your-use-case","Which Routing API Is Best for Your Use Case?",[34,328,329],{},"Different applications have different constraints. Here is how the Stadia Maps Routing API fits several common use cases, based on the product pages and blog posts linked above:",[49,331,332,338,348,356,368,378],{},[52,333,334,337],{},[103,335,336],{},"Logistics and last-mile delivery."," Traffic-Influenced Routing plus Matrix Routing plus Optimized Routing cover fleet ETAs, service-area analysis, and multi-stop planning. Persistent storage of routing and geocoding results is allowed on Standard, Professional, and Enterprise plans.",[52,339,340,343,344,347],{},[103,341,342],{},"Multi-modal mobility (trucks, e-bikes, LSVs, transit)."," Valhalla-backed routing supports per-mode costing models. The ",[38,345,346],{"href":282},"Beyond the Car blog post"," covers this in depth.",[52,349,350,260,353,355],{},[103,351,352],{},"Consumer navigation apps.",[38,354,89],{"href":88}," provides a cross-platform navigation SDK for Android, iOS, and PWAs, with a Rust core and BSD-licensed open source code.",[52,357,358,361,362,367],{},[103,359,360],{},"Regulated industries (healthcare, finance, government)."," Stadia Maps' privacy posture (no end-user tracking, no SDK telemetry, no data resale) and ",[38,363,366],{"href":364,"rel":365,"target":74},"https:\u002F\u002Fdocs.stadiamaps.com\u002Feu-gdpr-endpoints\u002F",[73],"EU-only endpoints"," make it a fit where compliance and data residency matter.",[52,369,370,373,374,377],{},[103,371,372],{},"Teams with unpredictable growth."," Credit-based pricing avoids MAU billing shock. The ",[38,375,376],{"href":63},"pricing page"," has fixed credit pools per plan and opt-in overages.",[52,379,380,383,384,388],{},[103,381,382],{},"On-premises or embedded deployments."," Stadia Maps offers ",[38,385,387],{"href":386},"\u002Fproducts\u002Fon-prem-embedded\u002F","On-Prem and Embedded Solutions"," for teams that need to run the stack in their own environment.",[44,390,392],{"id":391},"what-are-common-routing-api-pricing-models","What Are Common Routing API Pricing Models?",[34,394,395],{},"Routing APIs typically bill in one of three ways:",[49,397,398,404,412],{},[52,399,400,403],{},[103,401,402],{},"Per-request or per-credit."," Every API call has a fixed cost. Growth in usage scales linearly with billing. Stadia Maps uses this model with a unified credit pool.",[52,405,406,409,410,65],{},[103,407,408],{},"Per monthly active user (MAU)."," Billing scales with the number of end users, not API calls. Popular in navigation SDKs. Discussed in ",[38,411,122],{"href":121},[52,413,414,417],{},[103,415,416],{},"Enterprise contract."," Custom pricing negotiated for high-volume or on-premises deployments.",[34,419,420,421,423,424,302,427,307,430,433],{},"For teams doing a real cost comparison, Stadia Maps' ",[38,422,376],{"href":63}," has the full credit schedule per feature, and the switch pages for ",[38,425,426],{"href":300},"Google",[38,428,429],{"href":305},"Mapbox",[38,431,432],{"href":310},"MapTiler"," include pairwise cost breakdowns.",[435,436],"faq-section",{":faqs":437},"[{\"question\":\"What is a routing API?\",\"answer\":\"A routing API is an HTTP service that returns turn-by-turn directions, travel time estimates, and route geometry between two or more geographic points. Modern routing APIs typically also support travel time matrices between many origins and destinations, isochrones (reachable areas), route optimization for multiple stops, map matching for GPS traces, and traffic-influenced ETAs.\"},{\"question\":\"What should you evaluate when choosing a routing API?\",\"answer\":\"The main dimensions to evaluate are: data sources (OpenStreetMap versus proprietary), feature coverage (routing, matrix, isochrones, optimization, map matching, traffic), pricing model (usage-based versus MAU-based), storage rights, developer experience (SDKs, docs, support), and privacy posture.\"},{\"question\":\"Which routing API is best for privacy-conscious apps?\",\"answer\":\"Stadia Maps does not track end users, does not require SDK telemetry, and does not sell data to advertisers. The Stadia Maps blog post The Invisible Costs of Routing walks through how MAU-based pricing and SDK telemetry work at other vendors and why the Stadia Maps usage-based model is different. EU-only endpoints are also available for teams with data-residency requirements.\"},{\"question\":\"Can I self-host a routing engine?\",\"answer\":\"Yes. Valhalla is an open-source routing engine you can self-host. Stadia Maps contributes to Valhalla and offers on-premises and embedded deployment options for teams that need to run the stack in their own environment.\"},{\"question\":\"How much does Stadia Maps routing cost?\",\"answer\":\"Stadia Maps uses a unified credit pool. Standard routing, map matching, nearest roads, trace attributes, and isochrones cost 20 credits per request. Optimized routing costs 40 credits per request. Time\u002Fdistance matrix is 10 credits per element. Traffic-influenced profiles are 60 or 120 credits per request depending on tier. Plans start free with 200,000 credits per month and scale to Professional at $250 per month for 25 million credits.\"},{\"question\":\"What is the difference between a routing API and a navigation SDK?\",\"answer\":\"A routing API returns route data (geometry, distance, ETA, turn-by-turn instructions) over HTTP. A navigation SDK is a client-side library that consumes route data and drives an interactive navigation experience, including live location tracking, off-route detection, rerouting, and turn-by-turn guidance. Stadia Maps ships both: the Routing API for the data, and Ferrostar for the client-side navigation experience.\"}]",[44,439,441],{"id":440},"where-to-go-next","Where to Go Next",[443,444,446],"h3",{"id":445},"from-the-blog","From the Blog",[34,448,449],{},"More on routing and navigation from the Stadia Maps blog:",[49,451,452,456,460,464,468],{},[52,453,454],{},[38,455,263],{"href":121},[52,457,458],{},[38,459,283],{"href":282},[52,461,462],{},[38,463,273],{"href":272},[52,465,466],{},[38,467,293],{"href":292},[52,469,470],{},[38,471,473],{"href":472},"\u002Fblog\u002F2024-matrix-navigation-credit-updates\u002F","Fall 2024 Credit Schedule Updates",[443,475,477],{"id":476},"routing-navigation","Routing & Navigation",[49,479,480,485,489,494,502,506,511,515,519,527,536],{},[52,481,482],{},[38,483,484],{"href":40},"Routing & Navigation product overview",[52,486,487],{},[38,488,170],{"href":169},[52,490,491],{},[38,492,493],{"href":188},"Matrix Routing",[52,495,496,498,499,501],{},[38,497,198],{"href":197}," and the ",[38,500,203],{"href":202}," page",[52,503,504],{},[38,505,82],{"href":81},[52,507,508],{},[38,509,510],{"href":88},"Ferrostar Navigation SDK",[52,512,513],{},[38,514,222],{"href":221},[52,516,517],{},[38,518,231],{"href":230},[52,520,521,526],{},[38,522,525],{"href":523,"rel":524,"target":74},"https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F",[73],"Routing docs"," for the full API reference",[52,528,529,302,531,307,533,535],{},[38,530,301],{"href":300},[38,532,306],{"href":305},[38,534,311],{"href":310}," for detailed vendor comparisons",[52,537,538,541],{},[38,539,540],{"href":63},"Stadia Maps pricing"," for the credit schedule",{"title":543,"searchDepth":544,"depth":544,"links":545},"",4,[546,548,549,550,551,552,553,554],{"id":46,"depth":547,"text":47},2,{"id":93,"depth":547,"text":94},{"id":150,"depth":547,"text":151},{"id":248,"depth":547,"text":249},{"id":315,"depth":547,"text":316},{"id":325,"depth":547,"text":326},{"id":391,"depth":547,"text":392},{"id":440,"depth":547,"text":441,"children":555},[556,558],{"id":445,"depth":557,"text":446},3,{"id":476,"depth":557,"text":477},"The best routing API depends on your use case. Compare data sources, pricing, feature coverage, and privacy across major routing APIs including Stadia Maps.","md",{"script":562},[],"\u002Fimages\u002Fog\u002Fwhat-is-the-best-routing-api.png",null,{"author":566},"Stadia Maps Team",true,"2026-08-19","---\ntitle: What Is the Best Routing API?\ndescription: The best routing API depends on your use case. Compare data sources, pricing, feature coverage, and privacy across major routing APIs including Stadia Maps.\nauthor: Stadia Maps Team\ncategory: Routing & Navigation\nimage: \u002Fimages\u002Fog\u002Fwhat-is-the-best-routing-api.png\nhead:\n  script: []\npublished: 2026-08-19\nterm: Routing API\ntermDescription: An HTTP service that returns turn-by-turn directions, travel time estimates, and route geometry between two or more geographic points.\n---\n\n# What Is the Best Routing API?\n\nThe best routing API depends on what you are building. A logistics platform routing thousands of trucks has different needs than a hiking app plotting a walking route. Rather than name a single winner, this page walks through what to evaluate when comparing routing APIs, describes what the [Stadia Maps Routing API](\u002Fproducts\u002Frouting-navigation\u002F) offers, and links to Stadia Maps' own published comparisons for context.\n\n## Key Takeaways\n\n- No single routing API is \"best\" for every use case. The right choice depends on data sources, feature coverage, pricing model, storage rights, and privacy posture.\n- The [Stadia Maps Routing API](\u002Fproducts\u002Frouting-navigation\u002F) covers turn-by-turn directions, matrix, isochrones, optimized routing, map matching, road information, and traffic-influenced routing under one unified [credit-based pricing model](\u002Fpricing\u002F).\n- Stadia Maps' routing is built on [Valhalla](https:\u002F\u002Fgithub.com\u002Fvalhalla\u002Fvalhalla), an open-source routing engine Stadia Maps contributes to.\n- [Traffic-Influenced Routing](\u002Fproducts\u002Frouting-navigation\u002Ftraffic-influenced-routing\u002F) adds live and predictive traffic data from TomTom (600M+ connected devices) on top of the same API.\n- [Ferrostar](\u002Fproducts\u002Frouting-navigation\u002Fferrostar-navigation-sdk\u002F), Stadia Maps' navigation SDK, is a BSD-licensed, cross-platform (iOS, Android, PWA) SDK with a Rust core.\n\n## What Makes a Routing API \"Best\"?\n\nSix evaluation dimensions matter for most developer teams:\n\n- **Data sources.** Where the road network, speed limits, and place names come from. OpenStreetMap-based vendors have community-updated data and open licensing. Proprietary vendors have more control over data curation but limited transparency into updates.\n- **Feature coverage.** Does the API include the core primitives you need: turn-by-turn directions, travel time matrix, isochrones, route optimization, map matching, road attributes, elevation, traffic-influenced ETAs?\n- **Pricing model.** Is billing usage-based (per-request or per-credit) or MAU-based (per active user)? MAU pricing penalizes growth; usage-based pricing scales with actual API calls. Stadia Maps' post [The Invisible Costs of Routing](\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F) walks through this trade-off in detail.\n- **Storage rights.** Can you cache and persist routing results in your database? Some vendors restrict long-term storage or charge multiples of the request price for it.\n- **Developer experience.** Availability of SDKs, quality of documentation, code examples, and support. Stadia Maps ships [official SDKs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Foverview\u002F) for TypeScript, Python, Kotlin, Swift, and PHP, plus platform-specific navigation and search SDKs.\n- **Privacy posture.** Does the vendor track end users, require SDK telemetry, or sell data? For regulated industries (healthcare, finance, government), this can be a hard requirement rather than a preference.\n\n## What Does the Stadia Maps Routing API Offer?\n\nThe [Stadia Maps Routing API](\u002Fproducts\u002Frouting-navigation\u002F) provides the following primitives, all served from one API and billed from one unified [credit pool](\u002Fpricing\u002F):\n\n- **[Turn-by-Turn Directions](\u002Fproducts\u002Frouting-navigation\u002Fturn-by-turn-directions\u002F).** Reliable routing with precise turn-by-turn guidance, distance, and travel time calculations. Available for driving, walking, cycling, bus, taxi, truck, and more. 20 credits per request.\n- **[Optimized Routing](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Foptimized-routing\u002F).** Ordered stops for multi-point routing (a TSP-style problem). 40 credits per request.\n- **[Time\u002FDistance Matrix](\u002Fproducts\u002Frouting-navigation\u002Fmatrix-routing\u002F).** Rapid calculation of travel times and distances between many origins and destinations. 10 credits per element. 625-element limit on the Standard plan; 10,000-element limit on Professional.\n- **[Isochrones](\u002Fproducts\u002Frouting-navigation\u002Fisochrones\u002F).** Reachable areas from a point within a set time or distance. 20 credits per request. See the companion [What Is an Isochrone?](\u002Flearn\u002Fisochrones\u002F) page for a deeper walkthrough.\n- **[Map Matching](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fmap-matching\u002F).** Snap a GPS trace to the road network. 20 credits per request.\n- **[Road Information](\u002Fproducts\u002Frouting-navigation\u002Froad-information\u002F).** Nearest street, speed limits, grades, surface quality, and other road attributes. 20 credits per request.\n- **[Elevation](\u002Fproducts\u002Frouting-navigation\u002Felevation\u002F).** Elevation at a point or along a route. 5 credits per request.\n- **[Traffic-Influenced Routing](\u002Fproducts\u002Frouting-navigation\u002Ftraffic-influenced-routing\u002F).** Live and predictive traffic on top of the same routing endpoints, powered by TomTom's data from 600 million connected devices. 60 credits per request for adaptive traffic; 120 credits for premium.\n\nFor mobile apps, [Ferrostar](\u002Fproducts\u002Frouting-navigation\u002Fferrostar-navigation-sdk\u002F) adds real-time navigation with turn-by-turn guidance, powered by the same routing and road information endpoints. Ferrostar is cross-platform (Android, iOS, PWA), uses a Rust core for memory safety and performance, and is BSD-licensed open source.\n\n## How Does Stadia Maps Routing Compare?\n\nStadia Maps has published several posts that explain how its approach differs from the routing status quo. Each is grounded in a specific technical or business trade-off, not marketing framing.\n\n- **On MAU-based pricing and telemetry.** [The Invisible Costs of Routing: Privacy, Pricing, and Avoiding the \"MAU\" Trap](\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F) explains why most mapping SDKs harvest user data and charge by monthly active user, and how Stadia Maps' usage-based billing avoids both.\n- **On OSM plus traffic.** [Why Basic OpenStreetMap Routing Needs Real-Time Traffic](\u002Fblog\u002Fwhy-osm-routing-needs-real-time-traffic\u002F) explains why raw OSM routing is a static dataset, how algorithmic ETAs fall apart in production logistics, and how Stadia Maps closes the gap with TomTom-powered traffic data.\n- **On modal-specific routing.** [Beyond the Car: Routing for the Other 90% of Transport](\u002Fblog\u002Fbeyond-the-car-routing-for-specialized-fleets\u002F) covers why car-first routing APIs fail trucks, e-bikes, and low-speed vehicles, and how Valhalla plus OSM lets Stadia Maps handle modal-specific constraints.\n- **On traffic-influenced routing launch.** [Traffic-Influenced Routing Is Here (Public Preview)](\u002Fblog\u002Ftraffic-influenced-routing-in-public-preview\u002F) covers the addition of live and historical TomTom traffic to routing, optimized routing, map matching, isochrones, and matrices across 80+ countries.\n\nFor direct vendor-by-vendor migration comparisons, Stadia Maps maintains dedicated switch pages: [Switch from Google](\u002Fswitch-to-stadia\u002Ffrom-google\u002F), [Switch from Mapbox](\u002Fswitch-to-stadia\u002Ffrom-mapbox\u002F), and [Switch from MapTiler](\u002Fswitch-to-stadia\u002Ffrom-maptiler\u002F). Those pages are the authoritative source for pricing and feature comparisons across those specific vendors.\n\n## What Are the Major Routing API Options?\n\nThe mainstream commercial routing APIs available to developers include Google Maps Platform, Mapbox, HERE Technologies, TomTom, and Stadia Maps. Each has a different data foundation and product focus. Beyond the commercial options, Valhalla (which Stadia Maps contributes to) is a leading open-source routing engine that can be self-hosted.\n\nBecause vendor pricing and features change frequently, the most reliable way to compare specifics is to check each vendor's own pricing and API reference pages at the time you evaluate. Stadia Maps' Switch pages linked in the previous section are the current, maintained source for detailed pairwise comparisons.\n\n## Which Routing API Is Best for Your Use Case?\n\nDifferent applications have different constraints. Here is how the Stadia Maps Routing API fits several common use cases, based on the product pages and blog posts linked above:\n\n- **Logistics and last-mile delivery.** Traffic-Influenced Routing plus Matrix Routing plus Optimized Routing cover fleet ETAs, service-area analysis, and multi-stop planning. Persistent storage of routing and geocoding results is allowed on Standard, Professional, and Enterprise plans.\n- **Multi-modal mobility (trucks, e-bikes, LSVs, transit).** Valhalla-backed routing supports per-mode costing models. The [Beyond the Car blog post](\u002Fblog\u002Fbeyond-the-car-routing-for-specialized-fleets\u002F) covers this in depth.\n- **Consumer navigation apps.** [Ferrostar](\u002Fproducts\u002Frouting-navigation\u002Fferrostar-navigation-sdk\u002F) provides a cross-platform navigation SDK for Android, iOS, and PWAs, with a Rust core and BSD-licensed open source code.\n- **Regulated industries (healthcare, finance, government).** Stadia Maps' privacy posture (no end-user tracking, no SDK telemetry, no data resale) and [EU-only endpoints](https:\u002F\u002Fdocs.stadiamaps.com\u002Feu-gdpr-endpoints\u002F) make it a fit where compliance and data residency matter.\n- **Teams with unpredictable growth.** Credit-based pricing avoids MAU billing shock. The [pricing page](\u002Fpricing\u002F) has fixed credit pools per plan and opt-in overages.\n- **On-premises or embedded deployments.** Stadia Maps offers [On-Prem and Embedded Solutions](\u002Fproducts\u002Fon-prem-embedded\u002F) for teams that need to run the stack in their own environment.\n\n## What Are Common Routing API Pricing Models?\n\nRouting APIs typically bill in one of three ways:\n\n- **Per-request or per-credit.** Every API call has a fixed cost. Growth in usage scales linearly with billing. Stadia Maps uses this model with a unified credit pool.\n- **Per monthly active user (MAU).** Billing scales with the number of end users, not API calls. Popular in navigation SDKs. Discussed in [The Invisible Costs of Routing](\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F).\n- **Enterprise contract.** Custom pricing negotiated for high-volume or on-premises deployments.\n\nFor teams doing a real cost comparison, Stadia Maps' [pricing page](\u002Fpricing\u002F) has the full credit schedule per feature, and the switch pages for [Google](\u002Fswitch-to-stadia\u002Ffrom-google\u002F), [Mapbox](\u002Fswitch-to-stadia\u002Ffrom-mapbox\u002F), and [MapTiler](\u002Fswitch-to-stadia\u002Ffrom-maptiler\u002F) include pairwise cost breakdowns.\n\n::faq-section\n---\nfaqs:\n  - question: What is a routing API?\n    answer: A routing API is an HTTP service that returns turn-by-turn directions,\n      travel time estimates, and route geometry between two or more geographic\n      points. Modern routing APIs typically also support travel time matrices\n      between many origins and destinations, isochrones (reachable areas), route\n      optimization for multiple stops, map matching for GPS traces, and\n      traffic-influenced ETAs.\n  - question: What should you evaluate when choosing a routing API?\n    answer: \"The main dimensions to evaluate are: data sources (OpenStreetMap versus\n      proprietary), feature coverage (routing, matrix, isochrones, optimization,\n      map matching, traffic), pricing model (usage-based versus MAU-based),\n      storage rights, developer experience (SDKs, docs, support), and privacy\n      posture.\"\n  - question: Which routing API is best for privacy-conscious apps?\n    answer: Stadia Maps does not track end users, does not require SDK telemetry,\n      and does not sell data to advertisers. The Stadia Maps blog post The\n      Invisible Costs of Routing walks through how MAU-based pricing and SDK\n      telemetry work at other vendors and why the Stadia Maps usage-based model\n      is different. EU-only endpoints are also available for teams with\n      data-residency requirements.\n  - question: Can I self-host a routing engine?\n    answer: Yes. Valhalla is an open-source routing engine you can self-host. Stadia\n      Maps contributes to Valhalla and offers on-premises and embedded\n      deployment options for teams that need to run the stack in their own\n      environment.\n  - question: How much does Stadia Maps routing cost?\n    answer: Stadia Maps uses a unified credit pool. Standard routing, map matching,\n      nearest roads, trace attributes, and isochrones cost 20 credits per\n      request. Optimized routing costs 40 credits per request. Time\u002Fdistance\n      matrix is 10 credits per element. Traffic-influenced profiles are 60 or\n      120 credits per request depending on tier. Plans start free with 200,000\n      credits per month and scale to Professional at $250 per month for 25\n      million credits.\n  - question: What is the difference between a routing API and a navigation SDK?\n    answer: \"A routing API returns route data (geometry, distance, ETA, turn-by-turn\n      instructions) over HTTP. A navigation SDK is a client-side library that\n      consumes route data and drives an interactive navigation experience,\n      including live location tracking, off-route detection, rerouting, and\n      turn-by-turn guidance. Stadia Maps ships both: the Routing API for the\n      data, and Ferrostar for the client-side navigation experience.\"\n---\n::\n\n## Where to Go Next\n\n### From the Blog\n\nMore on routing and navigation from the Stadia Maps blog:\n\n- [The Invisible Costs of Routing: Privacy, Pricing, and Avoiding the \"MAU\" Trap](\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F)\n- [Beyond the Car: Routing for the Other 90% of Transport](\u002Fblog\u002Fbeyond-the-car-routing-for-specialized-fleets\u002F)\n- [Why Basic OpenStreetMap Routing Needs Real-Time Traffic](\u002Fblog\u002Fwhy-osm-routing-needs-real-time-traffic\u002F)\n- [Traffic-Influenced Routing Is Here (Public Preview)](\u002Fblog\u002Ftraffic-influenced-routing-in-public-preview\u002F)\n- [Fall 2024 Credit Schedule Updates](\u002Fblog\u002F2024-matrix-navigation-credit-updates\u002F)\n\n### Routing & Navigation\n\n- [Routing & Navigation product overview](\u002Fproducts\u002Frouting-navigation\u002F)\n- [Turn-by-Turn Directions](\u002Fproducts\u002Frouting-navigation\u002Fturn-by-turn-directions\u002F)\n- [Matrix Routing](\u002Fproducts\u002Frouting-navigation\u002Fmatrix-routing\u002F)\n- [Isochrones](\u002Fproducts\u002Frouting-navigation\u002Fisochrones\u002F) and the [What Is an Isochrone?](\u002Flearn\u002Fisochrones\u002F) page\n- [Traffic-Influenced Routing](\u002Fproducts\u002Frouting-navigation\u002Ftraffic-influenced-routing\u002F)\n- [Ferrostar Navigation SDK](\u002Fproducts\u002Frouting-navigation\u002Fferrostar-navigation-sdk\u002F)\n- [Road Information](\u002Fproducts\u002Frouting-navigation\u002Froad-information\u002F)\n- [Elevation](\u002Fproducts\u002Frouting-navigation\u002Felevation\u002F)\n- [Routing docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F) for the full API reference\n- [Switch from Google](\u002Fswitch-to-stadia\u002Ffrom-google\u002F), [Switch from Mapbox](\u002Fswitch-to-stadia\u002Ffrom-mapbox\u002F), and [Switch from MapTiler](\u002Fswitch-to-stadia\u002Ffrom-maptiler\u002F) for detailed vendor comparisons\n- [Stadia Maps pricing](\u002Fpricing\u002F) for the credit schedule\n",{"title":5,"description":559},"learn\u002Fbest-routing-api","Routing API","An HTTP service that returns turn-by-turn directions, travel time estimates, and route geometry between two or more geographic points.","f4kZm5hIBQUMd1pBasNWVxslypaq_bvNB1q9DK4PggI",[576,581,588],{"title":203,"description":577,"path":578,"published":579,"category":477,"rawbody":580},"Learn how isochrones work, what parameters matter, and how to generate one with the Stadia Maps Isochrone API.","\u002Flearn\u002Fisochrones","2026-07-14","---\ntitle: What Is an Isochrone?\ndescription: Learn how isochrones work, what parameters matter, and how to generate one with the Stadia Maps Isochrone API.\ncategory: Routing & Navigation\nhead:\n  script: []\nimage: \u002Fimages\u002Fog\u002Fwhat-is-an-isochrone.png\npublished: 2026-07-14\nschemaOrg:\n  - \"@type\": FAQPage\n    mainEntity:\n      - \"@type\": Question\n        name: What is an isochrone map?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: An isochrone map displays one or more isochrone shapes, each connecting all points reachable within a set travel time or distance from a common starting point. Isochrone maps are used for site selection, accessibility analysis, service-area planning, and mobility studies.\n      - \"@type\": Question\n        name: What is the difference between an isochrone and an isodistance?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Isochrones measure reachability in units of time; isodistances measure reachability in units of distance. The Stadia Maps Isochrone API can be used to produce either by setting a time or distance value on each contour in the request.\n      - \"@type\": Question\n        name: What travel modes does the Stadia Maps Isochrone API support?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: The Stadia Maps Isochrone API supports nearly a dozen travel modes, including auto, bicycle, pedestrian, bus, taxi, and truck. Traffic-influenced variants exist for auto, bus, taxi, and truck. The full list is in the API reference.\n      - \"@type\": Question\n        name: Do isochrones account for traffic?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: They can. The Stadia Maps Isochrone API offers traffic-influenced profiles via _traffic and _traffic_premium suffixes on supported costing models. A traffic-influenced isochrone with an explicit date_time reflects live conditions and historical patterns; a static isochrone assumes average speeds. Traffic-influenced routing requires a Standard plan or higher.\n      - \"@type\": Question\n        name: How is an isochrone request billed on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Isochrone requests are billed as routing requests on the Stadia Maps API credit system. Contour count does not multiply the cost; a single request with three contours is a single billable request.\nterm: Isochrone\ntermDescription: A shape on a map showing everywhere reachable from a starting point within a set travel time or distance, given a mode of travel.\n---\n\n# What Is an Isochrone?\n\nAn [isochrone](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIsochrone_map) is a shape on a map that shows everywhere you can reach from a starting point within a set travel time or distance, given a mode of travel. Also called a travel time map, isoline, or reachable range, an isochrone follows the road, path, or transit network, so the shape reflects how people actually move, not just how far a straight line goes. The [Stadia Maps Isochrone API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) returns them as GeoJSON polygons or linestrings for driving, walking, cycling, and nearly a dozen other travel modes.\n\n## Key Takeaways\n\n- An isochrone shows everywhere reachable from a starting point within a set travel time or distance, based on the real road, path, or transit network.\n- Unlike a fixed-radius buffer, an isochrone accounts for road geometry, one-way streets, mode of travel, and (optionally) real-time traffic.\n- The Stadia Maps Isochrone API supports nearly a dozen travel modes, including driving, walking, cycling, bus, taxi, and truck.\n- Output is a GeoJSON FeatureCollection that renders directly in MapLibre GL JS, Leaflet, or any GeoJSON-aware map library.\n- Isochrones are the right tool for site selection, service-area planning, and accessibility analysis. They are not a substitute for routing (single ETA) or matrix (ranked distances).\n\n## Why Not Just Use a Radius for Isochrones?\n\nA fixed-radius buffer is fast, but for most real questions, it is wrong. A 10-minute drive out of downtown San Francisco covers a different area than a 10-minute drive out of suburban Phoenix. Highways, one-way streets, rivers with no bridges, transit availability, and pedestrian-only zones all bend the shape.\n\nCases where a radius breaks:\n\n- **Rivers and rail corridors.** A bridge or tunnel can be the only crossing for kilometers. A circle ignores that.\n- **One-way networks.** Driving out of a dense center is often slower than driving in. The reachable area is asymmetric.\n- **Mode mismatch.** A 15-minute walking radius reaches almost nothing on a road network built for cars, not people.\n- **Time of day.** A drive-time isochrone at 04:00 is much larger than the same isochrone at 17:30 when accounting for traffic.\n\nIf your product or application is making decisions based on who can reach a point quickly, then a radius is a meaningful penalty for accuracy. That is what the [Stadia Maps Isochrone API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) is designed to fix.\n\n## How Isochrones Are Calculated\n\nIsochrone engines work in roughly the same way:\n\n1. Take the [road, path, and transit network](https:\u002F\u002Fwiki.openstreetmap.org\u002Fwiki\u002FRouting) as a graph.\n2. Assign a travel cost to every edge based on speed, mode, and any time-of-day model.\n3. Run a search outward from the origin, expanding by accumulated cost rather than distance.\n4. When the search hits each time or distance threshold, capture the reachable subgraph.\n5. Turn that subgraph into a polygon or linestring by buffering reachable edges and dissolving the result.\n\nStadia Maps runs isochrones on [Valhalla](https:\u002F\u002Fgithub.com\u002Fvalhalla\u002Fvalhalla), an open-source routing engine that Stadia Maps contributes to. Valhalla uses a tiled, multimodal graph and supports per-mode costing models, which is why the same endpoint can produce a useful pedestrian, bicycle, or automobile isochrone without swapping engines. For more on how the Stadia Maps routing stack fits together, see the [Routing overview](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F).\n\n## Isochrone Parameters That Matter\n\nThe [Stadia Maps Isochrone API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) exposes the parameters that actually change the shape.\n\n- **`locations`**: The starting point (latitude and longitude). Required.\n- **`costing`**: The travel mode. Options include `auto`, `bicycle`, `pedestrian`, `bus`, `taxi`, and `truck`, among others. The full list is in the [API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fapi-reference\u002F).\n- **`contours`**: One or more time or distance thresholds. Each contour can carry a `color` that is echoed back in the response for direct rendering.\n- **`polygons`**: Set to `true` for filled polygons or `false` for linestrings. Use linestrings for accessibility plots or overlay layers.\n- **`date_time`**: For traffic-influenced modes, the departure or arrival time. Skipping this defaults to average conditions.\n\nTwo more that are less obvious but matter in production:\n\n- **`denoise`**: Removes small disconnected fragments below a relative size threshold. Lower it if you need to see remote islands of reachability.\n- **`generalize`**: Simplification tolerance in meters. Lower numbers produce more detailed shapes and larger payloads.\n\n## How Traffic Changes an Isochrone\n\nFor automobile, bus, taxi, and truck modes, the Stadia Maps Isochrone API supports [traffic-influenced profiles](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F#traffic-influenced-profiles) via the `_traffic` and `_traffic_premium` suffixes. `auto_traffic` and `truck_traffic_premium` are two examples.\n\nTraffic-influenced isochrones combine live conditions with historical data, so a rush-hour isochrone is typically smaller than the same isochrone at 03:00. If your product uses isochrones for logistics, dispatch, or delivery-zone decisions, a static-speed isochrone will overstate reachability during peak hours.\n\nTraffic-influenced routing requires a Standard plan or higher. See the [pricing page](\u002Fpricing\u002F) for plan details.\n\n## How Do You Generate an Isochrone?\n\nHere is what a request to the Stadia Maps Isochrone API looks like. This example asks for a 5-minute pedestrian isochrone from a point in Tallinn, Estonia.\n\n```http\nPOST https:\u002F\u002Fapi.stadiamaps.com\u002Fisochrone\u002Fv1\nContent-Type: application\u002Fjson\n\n{\n  \"locations\": [{\"lat\": 59.436884, \"lon\": 24.742595}],\n  \"costing\": \"pedestrian\",\n  \"contours\": [{\"time\": 5, \"color\": \"aabbcc\"}],\n  \"polygons\": true\n}\n```\n\nThe response is a [GeoJSON](https:\u002F\u002Fdatatracker.ietf.org\u002Fdoc\u002Fhtml\u002Frfc7946) `FeatureCollection` with one feature per contour. It renders directly in [MapLibre GL JS](https:\u002F\u002Fmaplibre.org\u002F), Leaflet, or any GeoJSON-aware renderer.\n\nFor runnable code in TypeScript, Python, Kotlin, Swift, PHP, or cURL, see the [Stadia Maps Isochrone API docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F). A step-by-step MapLibre GL JS walkthrough is in the [Display Isochrones on a Map tutorial](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fdisplay-isochrones-on-a-map\u002F).\n\n## Where Isochrones Fall Short\n\nIsochrones are not always the right tool. Beyond the parameter details in the [Isochrones documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F), here are the practical patterns worth knowing:\n\n- **Very small time bands are noisy.** A 1-minute isochrone is mostly buffer around the origin. For travel times below a few minutes, results depend heavily on off-road buffering rather than on real network travel, so use very short contours with caution.\n- **Static isochrones do not reflect traffic.** Without a `date_time` parameter, automobile isochrones can dramatically overstate reachability at rush hour or understate it at night.\n- **Cross-provider comparisons rarely agree.** Two providers will produce different polygons for the same origin because they use different graphs, different speed models, and different generalization settings. Standardize on a single provider for consistency across your product.\n- **Isochrones describe geographic reachability, not service areas.** Delivery zones, minimum-order distances, and exclusion rules are business logic that should sit on top of the isochrone, not inside it.\n\n## Isochrone vs. Matrix vs. Routing: Which Do You Need?\n\nThe [Stadia Maps Routing API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002F) family includes several related endpoints. Pick the right one:\n\n- For a single point-to-point travel time or ETA, use [standard routing](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fstandard-routing\u002F). It is cheaper and more precise than an isochrone.\n- For \"which of these N destinations is closest by drive time,\" use the [Time\u002FDistance Matrix API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Ftime-distance-matrix\u002F). Isochrones describe an area, not a ranking.\n- For service-area billing logic, compute the isochrone once, store the polygon, and query against it. Recomputing on every request wastes API credits.\n\n## Common Isochrone Use Cases\n\nIsochrones answer questions where a \"how far in time\" constraint matters more than a \"how far in miles\" constraint. The [Stadia Maps Isochrones product page](\u002Fproducts\u002Frouting-navigation\u002Fisochrones\u002F) frames it as \"reachable range decision-making\" and lists example questions this API commonly answers:\n\n- **Site selection.** Retail, healthcare, and logistics teams compare reachable population, demographics, or competitor density inside a drive-time band. A 20-minute isochrone is a better proxy for catchment than a 10-mile radius.\n- **Accessibility and mobility analysis.** Walking or transit isochrones show real access to schools, clinics, or grocery stores, not just distance.\n- **EV and fuel planning.** A driving isochrone with a distance constraint answers \"what is reachable in the last 20 miles before I need to charge or refuel?\"\n- **Marketplace coverage.** When a merchant joins a delivery platform, an isochrone defines the visible service area.\n- **Real estate search.** Filtering listings by \"30 minutes from my office by transit\" is an isochrone query against a property index.\n\n## Frequently Asked Questions\n\n### What is an isochrone map?\n\nAn isochrone map displays one or more isochrone shapes, each connecting all points reachable within a set travel time or distance from a common starting point. Isochrone maps are used for site selection, accessibility analysis, service-area planning, and mobility studies.\n\n### What is the difference between an isochrone and an isodistance?\n\nIsochrones measure reachability in units of time; isodistances measure reachability in units of distance. The [Stadia Maps Isochrone API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) can be used to produce either by setting a `time` or `distance` value on each contour in the request.\n\n### What travel modes does the Stadia Maps Isochrone API support?\n\nThe [Stadia Maps Isochrone API](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) supports nearly a dozen travel modes, including `auto`, `bicycle`, `pedestrian`, `bus`, `taxi`, and `truck`. Traffic-influenced variants exist for `auto`, `bus`, `taxi`, and `truck`. The full list is in the [API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fapi-reference\u002F).\n\n### Do isochrones account for traffic?\n\nThey can. The Stadia Maps Isochrone API offers [traffic-influenced profiles](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F#traffic-influenced-profiles) via `_traffic` and `_traffic_premium` suffixes on supported costing models. A traffic-influenced isochrone with an explicit `date_time` reflects live conditions and historical patterns; a static isochrone assumes average speeds. Traffic-influenced routing requires a Standard plan or higher.\n\n### How is an isochrone request billed on Stadia Maps?\n\nIsochrone requests are billed as routing requests on the [Stadia Maps API](\u002Fpricing\u002F) credit system. Contour count does not multiply the cost; a single request with three contours is a single billable request.\n\n## Where to Go Next\n\n### From the Blog\n\nMore on isochrones and adjacent routing topics:\n\n- [The Invisible Costs of Routing: Privacy, Pricing & the MAU Trap](\u002Fblog\u002Finvisible-costs-of-routing-privacy-pricing-mau-trap\u002F)\n- [Beyond the Car: Routing for the Other 90% of Transport](\u002Fblog\u002Fbeyond-the-car-routing-for-specialized-fleets\u002F)\n- [Why Basic OSM Routing Needs Real-Time Traffic](\u002Fblog\u002Fwhy-osm-routing-needs-real-time-traffic\u002F)\n- [Traffic-Influenced Routing Is Here (Public Preview)](\u002Fblog\u002Ftraffic-influenced-routing-in-public-preview\u002F)\n\n### Routing & Navigation\n\n- [Isochrones API documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fisochrones\u002F) for the full parameter set\n- [Display Isochrones on a Map tutorial](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fdisplay-isochrones-on-a-map\u002F) with a working MapLibre GL JS example\n- [Standard Routing](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Fstandard-routing\u002F) for a single point-to-point ETA\n- [Time\u002FDistance Matrix](https:\u002F\u002Fdocs.stadiamaps.com\u002Frouting\u002Ftime-distance-matrix\u002F) for ranked distances to many destinations\n- [Stadia Maps Isochrones product page](\u002Fproducts\u002Frouting-navigation\u002Fisochrones\u002F) and pricing tiers\n- [Matrix Routing product page](\u002Fproducts\u002Frouting-navigation\u002Fmatrix-routing\u002F)\n",{"title":582,"description":583,"path":584,"published":585,"category":586,"rawbody":587},"Vector vs. Raster Map Tiles","Vector and raster are the two main map tile formats. Learn how they differ, when to use each, and how Stadia Maps serves both with MapLibre and OpenLayers.","\u002Flearn\u002Fvector-versus-raster-map-tiles","2026-07-27","Maps","---\ntitle: Vector vs. Raster Map Tiles\ndescription: Vector and raster are the two main map tile formats. Learn how they differ, when to use each, and how Stadia Maps serves both with MapLibre and OpenLayers.\nauthor: Stadia Maps Team\ncategory: Maps\nimage: \u002Fimages\u002Fog\u002Fwhat-is-vector-vs-raster-map-tiles.png\nhead:\n  script: []\npublished: 2026-07-27\nschemaOrg:\n  - \"@type\": FAQPage\n    mainEntity:\n      - \"@type\": Question\n        name: What is the difference between vector and raster map tiles?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Raster map tiles are PNG or JPG images that get stitched together in a grid. Vector map tiles contain a mathematical description of the geometry plus structured data about each feature on the map, and get rendered client-side. Vector tiles allow dynamic styling, look sharp at any resolution, and typically reduce tile requests by around 60%. Raster tiles are simpler to render and battle-tested across older devices and rendering libraries.\n      - \"@type\": Question\n        name: Which is better, vector or raster map tiles?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: According to the Stadia Maps Switching to Vector Tiles guide, vector tiles offer greater flexibility, look great on any screen, and typically reduce costs by around 60%. However, if your application is targeting older devices or does not need a high level of detail, raster tiles are not necessarily a bad option.\n      - \"@type\": Question\n        name: Do vector map tiles cost less than raster map tiles?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: On the Stadia Maps API, both vector and raster tile requests are billed the same way, but vector tiles typically require fewer total requests to render a comparable map. The Switching to Vector Tiles guide reports users switching to vector make approximately 60% fewer tile requests on average.\n      - \"@type\": Question\n        name: What format are Stadia Maps vector tiles served in?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Stadia Maps vector tiles are distributed in the widely-adopted Mapbox Vector Tile (MVT) format, with a schema compatible with OpenMapTiles. They render in MapLibre GL JS, MapLibre Native, Leaflet (via maplibre-gl-leaflet), OpenLayers (via ol-mapbox-style), and other MVT-compatible renderers.\n      - \"@type\": Question\n        name: Can I use vector tiles with Leaflet?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Yes. Leaflet can render Stadia Maps vector tiles via the maplibre-gl-leaflet plugin. You swap L.tileLayer for L.maplibreGL and point at a Stadia Maps vector style URL. This is the quickest migration path from raster Leaflet to vector without switching frameworks.\nterm: Map Tile\ntermDescription: A single image or data file, one of many that get stitched together to form a complete interactive map. Comes in two main formats, raster and vector.\n---\n\n# Vector vs. Raster Map Tiles\n\nVector and raster are the two main formats used to serve interactive map tiles. Raster tiles are PNG or JPG images stitched into a grid. Vector tiles contain a mathematical description of geometry plus structured data about each feature, rendered on the client. The [Stadia Maps Map Tiles API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fvector\u002F) serves both formats, so this comparison is not a pitch for one over the other. It's an honest walkthrough of the trade-offs.\n\n## Key Takeaways\n\n- Raster tiles are PNG or JPG images. Vector tiles are structured data, rendered client-side.\n- Vector tiles allow dynamic styling (colors, language, layer visibility, 3D perspective). Raster tiles do not.\n- According to Stadia Maps' [Switching to Vector Tiles guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fguides\u002Fswitching-your-maps-from-raster-to-vector-tiles\u002F), users switching to vector make approximately 60% fewer tile requests on average.\n- Raster tiles are battle-tested and easy to render on older devices and simpler libraries.\n- Stadia Maps serves both formats and contributes to MapLibre. Co-founder Luke Seelenbinder serves on MapLibre's governing board.\n\n## What Are Raster Map Tiles?\n\nRaster map tiles are PNG or JPG images that get stitched together in a grid to form a complete interactive map. When you zoom in and out of a map and see little blank squares filling in like a mosaic, those are tiles.\n\nThe [Stadia Maps Raster Map Tiles API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fraster\u002F) serves all of Stadia's house styles as PNG raster tiles at 256×256 and 512×512 pixel sizes. Raster tiles are supported up to zoom 20 for most styles (Stamen Watercolor is the exception at zoom 16).\n\n**Raster advantages (from the Stadia Maps guide):**\n\n- **Simplicity.** Just about every device can render a PNG or JPG image, and it is easy to build a performant renderer around them. Raster tiles do not require any other resources (fonts, icons) or special client-side logic.\n- **Specificity.** For minimalist styles, raster tiles can be more bandwidth-efficient because they only contain the raw visible pixels.\n\n**Raster limitations (from the Stadia Maps guide):**\n\n- **Inflexibility.** You cannot change much about raster tiles. Hiding a layer, changing the language of labels, or altering the appearance of the tiles is not possible client-side.\n- **Scalability.** Raster map tiles cannot be scaled up and down. High-DPI displays need 4× the pixels, and zooming produces temporary blur until the new tiles load.\n\n## What Are Vector Map Tiles?\n\nVector map tiles contain a mathematical description of geometry and structured data about each feature on the map. Rather than pre-rendered pixels, the tile carries the raw data and the client renders it in real time.\n\nThe [Stadia Maps Vector Map Tiles API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fvector\u002F) serves tiles in the widely-adopted Mapbox Vector Tile (MVT) format, with a schema compatible with OpenMapTiles. Stadia Maps supports zoom levels 0 through 14 for vector tiles, with over-zooming from the z14 tile beyond that. Stadia Maps recommends the [MapLibre GL JS](https:\u002F\u002Fmaplibre.org\u002F) and MapLibre Native renderers, but the tiles work in any MVT-compatible renderer.\n\n**Vector advantages (from the Stadia Maps guide):**\n\n- **Flexibility.** The actual data is preserved in the tile. You can [change the language](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fchanging-the-map-label-language\u002F) of text labels, change color scheme dynamically, switch styles based on time of day, or [add 3D perspective](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fadding-3d-buildings-to-your-maps-with-maplibre\u002F).\n- **Scalability.** Vector shapes scale up and down smoothly. Zooming feels continuous rather than stepped, and high-DPI displays get sharp output without extra bandwidth.\n- **Cost.** Vector tiles cover a larger area per tile. Stadia's guide reports users switching to vector make approximately 60% fewer tile requests on average.\n\n**Vector limitations (from the Stadia Maps guide):**\n\n- **Complexity.** Tiles render client-side, which may create performance concerns for older or embedded applications. Initial map load involves more network requests for fonts, icons, and style resources.\n- **Size.** For applications that only need a low level of detail and don't use 3D features, vector tiles can weigh slightly more. This is offset because zooming past level 14 uses the information already in the z14 tile.\n\n## Vector vs. Raster: Which Should You Use?\n\nThe [Stadia Maps Switching to Vector Tiles guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fguides\u002Fswitching-your-maps-from-raster-to-vector-tiles\u002F) summarizes the choice directly: \"Vector tiles offer greater flexibility, look great on any screen, and typically reduce costs by around 60%. However, if your application is targeting older devices or doesn't need a high level of detail (for example, our Alidade Smooth and Alidade Smooth Dark styles), raster tiles are not necessarily a bad option.\"\n\nChoose **vector** when you need:\n\n- Client-side style customization or language switching\n- 3D perspective, custom camera angles, or dynamic theming\n- Lower total tile requests at scale\n- Sharp rendering on high-DPI displays without paying 4× bandwidth\n\nChoose **raster** when you need:\n\n- Support for older devices or renderers that don't understand MVT\n- A minimalist style where bandwidth per tile is very small\n- The absolute simplest integration path in Leaflet, WordPress, or a static site\n- Static images (for those, the [Stadia Maps Static Maps API](https:\u002F\u002Fstadiamaps.com\u002Fproducts\u002Fmaps\u002Fstatic-maps\u002F) is a different product, tailored for embedding images in emails or apps without a JS runtime)\n\n## How Do You Serve Vector and Raster Tiles with Stadia Maps?\n\nBoth formats use straightforward URL patterns. Replace `\u003Cstyle>` with any of the [Stadia Maps map styles](https:\u002F\u002Fdocs.stadiamaps.com\u002Fthemes\u002F).\n\n**Vector tile URL formats:**\n\n```text\nhttps:\u002F\u002Ftiles.stadiamaps.com\u002Fdata\u002Fopenmaptiles.json\nhttps:\u002F\u002Ftiles.stadiamaps.com\u002Fdata\u002Fopenmaptiles\u002F{z}\u002F{x}\u002F{y}.pbf\n```\n\n**Raster tile URL format:**\n\n```text\nhttps:\u002F\u002Ftiles.stadiamaps.com\u002Ftiles\u002F\u003Cstyle>\u002F{z}\u002F{x}\u002F{y}{r}.png\n```\n\nThe `{r}` placeholder handles HiDPI (\"retina\") display support. Replace it with `@2x` for 2× scaled images, or drop it for 256×256 output.\n\nEU-only endpoints are available for both formats at `tiles-eu.stadiamaps.com`. See the [EU Endpoints docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Feu-gdpr-endpoints\u002F) for details.\n\nAuthentication uses domain-based auth for browser applications or an API key for backend and mobile applications. Full details in the [Authentication guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fauthentication\u002F).\n\n## How to Switch from Raster to Vector Tiles\n\nThe [Switching to Vector Tiles guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fguides\u002Fswitching-your-maps-from-raster-to-vector-tiles\u002F) walks through the common migration paths.\n\n- **Switching to MapLibre GL JS (web).** The most feature-rich option. See the [MapLibre GL JS quickstart](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fvector-maps-with-maplibre-gl-js\u002F).\n- **Keeping Leaflet.** Add vector rendering support via the `maplibre-gl-leaflet` plugin. Swap `L.tileLayer` for `L.maplibreGL` and point at a Stadia Maps vector style URL. See the [Vector Tiles with Leaflet tutorial](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fvector-tiles-with-leaflet\u002F).\n- **React Leaflet.** Add a small component. See the [Vector Tiles with React Leaflet tutorial](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fvector-tiles-with-react-leaflet\u002F).\n- **OpenLayers.** Load the `ol-mapbox-style` plugin and call `olms.apply` with a Stadia Maps vector style URL.\n- **Mobile (iOS, Android, Flutter, React Native).** See the [Native and Multi-platform maps overview](https:\u002F\u002Fdocs.stadiamaps.com\u002Fnative-multiplatform\u002Foverview\u002F).\n\n## Where Vector vs. Raster Tile Comparisons Fall Short\n\nA few things worth knowing before you take any comparison table (this one included) as absolute.\n\n- **\"60% fewer tile requests\" is an average, not a guarantee.** The actual reduction depends on the level of detail, the size of the viewport, and how much users pan and zoom. The Stadia Maps guide reports it as an average across users who switched.\n- **Vector isn't universally faster.** Initial map load can involve more network requests for fonts, icons, and style resources. First-paint may feel slower even when total data is lower.\n- **Not every renderer handles MVT with the same fidelity.** The Stadia Vector docs explicitly note that OpenLayers rendering \"isn't quite as powerful as MapLibre GL JS, but it's the quickest migration path to most of the benefits.\" Same idea for the Leaflet plugin.\n- **Older devices matter.** If a meaningful part of your user base runs older embedded browsers or low-power devices, raster is often the safer default. The Stadia guide calls this out explicitly.\n- **Style customization has its own learning curve.** The flexibility of vector tiles only pays off if you actually build styles. If you never customize, the raster experience of Stadia's house styles is just as good visually.\n\n## Common Use Cases for Vector and Raster Map Tiles\n\nWhere each format shines, drawn from the Stadia Maps docs and product page.\n\n**Vector tile use cases:**\n\n- Interactive web and mobile apps that need custom styling, language switching, or 3D perspective\n- Marker clustering, polyline overlays, and polygon overlays in [MapLibre GL JS](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fclustering-styling-points-with-maplibre\u002F)\n- Data visualization on top of a customizable basemap\n- Applications where reducing total tile requests matters at scale\n\n**Raster tile use cases:**\n\n- WordPress sites and CMS integrations via the [Leaflet](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fwordpress-with-leaflet\u002F) or [Mapster](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fwordpress-with-mapster\u002F) plugins\n- Older devices or environments that cannot run a WebGL-based renderer\n- QGIS and other GIS tools that consume raster XYZ tile services\n- Minimalist styles like [Alidade Smooth](https:\u002F\u002Fdocs.stadiamaps.com\u002Fmap-styles\u002Falidade-smooth\u002F) where bandwidth per tile is already very small\n\n## Frequently Asked Questions\n\n### What is the difference between vector and raster map tiles?\n\nRaster map tiles are PNG or JPG images that get stitched together in a grid. Vector map tiles contain a mathematical description of the geometry plus structured data about each feature on the map, and get rendered client-side. Vector tiles allow dynamic styling, look sharp at any resolution, and typically reduce tile requests by around 60%. Raster tiles are simpler to render and battle-tested across older devices and rendering libraries.\n\n### Which is better, vector or raster map tiles?\n\nAccording to the [Stadia Maps Switching to Vector Tiles guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fguides\u002Fswitching-your-maps-from-raster-to-vector-tiles\u002F): \"Vector tiles offer greater flexibility, look great on any screen, and typically reduce costs by around 60%. However, if your application is targeting older devices or doesn't need a high level of detail, raster tiles are not necessarily a bad option.\"\n\n### Do vector map tiles cost less than raster map tiles?\n\nOn the [Stadia Maps API](\u002Fpricing\u002F), both vector and raster tile requests are billed the same way. Vector typically requires fewer total requests to render a comparable map. The Switching to Vector Tiles guide reports users switching to vector make approximately 60% fewer tile requests on average.\n\n### What format are Stadia Maps vector tiles served in?\n\nStadia Maps vector tiles are distributed in the widely-adopted Mapbox Vector Tile (MVT) format, with a schema compatible with [OpenMapTiles](https:\u002F\u002Fopenmaptiles.org\u002F). They render in MapLibre GL JS, MapLibre Native, Leaflet (via `maplibre-gl-leaflet`), OpenLayers (via `ol-mapbox-style`), and other MVT-compatible renderers.\n\n### Can I use vector tiles with Leaflet?\n\nYes. Leaflet can render Stadia Maps vector tiles via the [`maplibre-gl-leaflet`](https:\u002F\u002Fgithub.com\u002Fmaplibre\u002Fmaplibre-gl-leaflet) plugin. You swap `L.tileLayer` for `L.maplibreGL` and point at a Stadia Maps vector style URL. This is the quickest migration path from raster Leaflet to vector without switching frameworks. Full walkthrough in the [Vector Tiles with Leaflet tutorial](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fvector-tiles-with-leaflet\u002F).\n\n## Where to Go Next\n\n### From the Blog\n\nMore on maps and rendering from the Stadia Maps blog:\n\n- [How We Fixed Water Feature Rendering Across All Zoom Levels](\u002Fblog\u002Ffixing-missing-water-interactive-basemaps\u002F)\n- [2026 Satellite Imagery Update: 37M km² at 30cm Resolution](\u002Fblog\u002F2026-satellite-imagery-update\u002F)\n- [Custom Markers and POST Support for Static Maps](\u002Fblog\u002Fcustom-markers-in-static-map-images\u002F)\n- [Announcing Cacheable Static Maps](\u002Fblog\u002Fannouncing-cacheable-static-map-images\u002F)\n- [Our SwiftUI DSL Is Joining the MapLibre Family](\u002Fblog\u002Fmaplibre-swiftui-dsl\u002F)\n\n### Maps\n\n- [Vector Map Tiles docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fvector\u002F) for tile URLs, authentication, and renderer support\n- [Raster Map Tiles docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fraster\u002F) for PNG tile URL formats and retina support\n- [Switching to Vector Tiles guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fguides\u002Fswitching-your-maps-from-raster-to-vector-tiles\u002F) for a full migration walkthrough\n- [Map Styles library](https:\u002F\u002Fdocs.stadiamaps.com\u002Fthemes\u002F) for the complete gallery of Stadia house styles\n- [Interactive Web Maps overview](https:\u002F\u002Fdocs.stadiamaps.com\u002Fmaps-for-web\u002F) for renderer selection and framework choices\n- [Custom Map Styling](https:\u002F\u002Fdocs.stadiamaps.com\u002Fcustom-styles\u002F) for building your own styles on top of the OpenMapTiles schema\n- [Maps product page](\u002Fproducts\u002Fmaps\u002F) and pricing tiers\n- [Static Maps product page](\u002Fproducts\u002Fmaps\u002Fstatic-maps\u002F) if you need pre-rendered map images instead\n",{"title":14,"description":589,"path":15,"published":590,"category":591,"rawbody":592},"Address autocomplete suggests places, addresses, and points of interest as users type. Learn how it works and how to add it with Stadia Maps SDKs and API.","2026-07-28","Geocoding & Search","---\ntitle: What Is Address Autocomplete?\ndescription: Address autocomplete suggests places, addresses, and points of interest as users type. Learn how it works and how to add it with Stadia Maps SDKs and API.\nauthor: Stadia Maps Team\ncategory: Geocoding & Search\nimage: \u002Fimages\u002Fog\u002Fwhat-is-address-autocomplete.png\nhead:\n  script: []\npublished: 2026-07-28\nschemaOrg:\n  - \"@type\": FAQPage\n    mainEntity:\n      - \"@type\": Question\n        name: What is address autocomplete used for?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Address autocomplete is used to suggest places, addresses, and points of interest as a user types. It powers search-as-you-type experiences in checkout flows, store locators, ride-share pickup selection, and any interface where a user needs to find and select a real-world location quickly.\n      - \"@type\": Question\n        name: What is the difference between address autocomplete and forward geocoding?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Autocomplete is optimized for speed on partial input. Forward geocoding is optimized for accuracy on complete input and can interpolate addresses. Use autocomplete for interactive search-as-you-type; switch to forward geocoding when the user finalizes the query.\n      - \"@type\": Question\n        name: Which SDKs does Stadia Maps offer for address autocomplete?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: \"Stadia Maps offers three first-party SDKs for address autocomplete: the MapLibre GL JS Search Box plugin for the web, SwiftUI Autocomplete Search for iOS, and Jetpack Compose Autocomplete Search for Android. Each handles debouncing, caching, and result ordering out of the box. If none fit, the underlying HTTP API is available directly.\"\n      - \"@type\": Question\n        name: What are the default autocomplete timing and input settings on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: The Stadia Maps autocomplete SDKs default to a 100ms minimum wait period between requests (minWaitPeriodMs) and a 3-character minimum input length (minInputLength). The MapLibre GL JS Search Box plugin also defaults to 5 maximum results (maxResults). These defaults balance server load with responsiveness.\n      - \"@type\": Question\n        name: How is an address autocomplete request billed on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Autocomplete requests are billed from the unified Stadia Maps API credit pool, the same pool that covers forward geocoding, reverse geocoding, routing, and tiles. Each autocomplete request is a single billable request.\nterm: Address Autocomplete\ntermDescription: A search-as-you-type interface that suggests addresses, places, and points of interest as a user types, ranked by relevance and proximity.\n---\n\n# What Is Address Autocomplete?\n\nAddress autocomplete is a search-as-you-type interface that suggests addresses, places, and points of interest as a user types, ranked by relevance and proximity. Also called type-ahead search, place search suggestions, or predictive search, address autocomplete is what turns a slow, error-prone address form into a two-tap interaction. The [Stadia Maps Autocomplete Search API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) powers this experience through a fast, partial-input endpoint plus first-party SDKs for the web, iOS, and Android.\n\n## Key Takeaways\n\n- Address autocomplete suggests places as a user types, based on partial input and typically ranked by proximity or a focus point.\n- It is not a substitute for forward geocoding. Autocomplete is tuned for speed on partial input; forward geocoding is tuned for accuracy on complete input and can interpolate addresses.\n- Stadia Maps ships three first-party SDKs (MapLibre GL JS, SwiftUI, Jetpack Compose) that handle debouncing, caching, and result ordering out of the box.\n- The Stadia Maps SDKs default to a 100ms minimum wait period between requests and a 3-character minimum input length.\n- Each autocomplete request is billed as a single request from the unified Stadia Maps API credit pool.\n\n## How Address Autocomplete Works\n\nAutocomplete is a variant of forward geocoding tuned for speed on incomplete input. It follows this rough flow:\n\n1. **User types.** The client waits for a minimum number of characters (typically two or three) before firing the first request.\n2. **Debounce.** The client waits a short interval (roughly 100ms) after each keystroke before sending a request, so it does not overwhelm the server on fast typing.\n3. **Server searches.** The [Stadia Maps Autocomplete Search API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) matches the partial input against the geocoding database and returns ranked candidates.\n4. **Client renders results.** Suggestions appear under the search field, typically 3 to 5 at a time.\n5. **User selects one.** The application takes the selected feature (with its full coordinates, address components, and layer) and moves on to the next step.\n\nTwo implementation details that matter in production:\n\n- **Out-of-order responses.** Fast typing produces overlapping requests. The client must show the response for the most recent input, not the last one to arrive. Modern async frameworks and the Stadia Maps SDKs handle this automatically.\n- **Result caching.** Recent queries can be served from the local cache, which cuts perceived latency and reduces API calls.\n\n## Which Autocomplete SDK Should You Use?\n\nStadia Maps ships three first-party SDKs for address autocomplete, each purpose-built for its platform. All of them handle debouncing, caching, out-of-order responses, and result ordering by default.\n\n- **[MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F)** for the web. Adds a search control to a MapLibre GL JS map. Configurable via options like `useMapFocusPoint`, `mapFocusPointMinZoom`, `minInputLength`, and `minWaitPeriodMs`. Available as an npm package or a CDN script tag.\n- **[SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F)** for iOS. A drop-in SwiftUI view for native iOS apps.\n- **[Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F)** for Android. A composable for native Android apps built with Jetpack Compose.\n\nIf none of the three fit your stack (React Native, Flutter, a custom UI framework, or a server-side integration), use the underlying HTTP API directly. The Stadia Maps [official SDKs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Foverview\u002F) also expose the endpoint from TypeScript, Python, Kotlin, Swift, and PHP.\n\n## Address Autocomplete Parameters That Matter\n\nThe [Autocomplete Search endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) takes one required parameter and several optional ones that tune the result set.\n\n- **`text`**: The partial user input. Required.\n- **`focus.point.lat` \u002F `focus.point.lon`**: Bias results toward a focus point. Typically the map center or the user's known location.\n- **`boundary.rect.*`, `boundary.circle.*`, `boundary.country`, `boundary.gid`**: Hard limits on where results can appear. Use these when your product only operates in specific regions.\n- **`layers`**: Restrict to specific layers (`address`, `venue`, `poi`, `street`, `locality`, and more). Fewer layers means faster, more relevant results. `layers=coarse` is the fastest option when you do not need addresses or POIs.\n- **`sources`**: Restrict to specific data sources (`openstreetmap`, `openaddresses`, `whosonfirst`, `geonames`, `foursquare`).\n- **`size`**: Maximum number of results to return. Default is 10; most autocomplete UIs display 3 to 5.\n- **`lang`**: A BCP47 language tag for localized results.\n\n## Autocomplete Defaults Worth Knowing\n\nThe [Stadia Maps SDKs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F#ready-to-go-integrations) enforce a set of defaults documented in the API and SDK references. Each one exists to balance API cost, server load, and interaction responsiveness.\n\n- **Minimum input length.** The [Autocomplete Search docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) recommend waiting for two or three characters of user input before sending a query. The [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) defaults `minInputLength` to 3.\n- **Debouncing.** The MapLibre plugin defaults `minWaitPeriodMs` to 100ms, meaning it waits 100ms between requests as the user types. The docs recommend throttling or debouncing for interactive applications; the ready-to-go integrations handle it automatically.\n- **Result caching.** The MapLibre plugin caches recent results to avoid duplicate calls.\n- **Out-of-order response handling.** The docs call this out explicitly: \"network requests might arrive out of order... our frameworks handle it automatically.\" Take care if you build your own low-level integration.\n- **Maximum results.** The MapLibre plugin defaults `maxResults` to 5.\n- **Layer selection.** Specifying only the [layers](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Flayers\u002F) you need improves relevance and performance. `layers=coarse` is especially useful when POIs and addresses are not needed.\n\n## How Do You Add Address Autocomplete?\n\nHere is what a direct call to the Stadia Maps Autocomplete Search API looks like. This example searches for a partial query in Tallinn, Estonia.\n\n```http\nGET https:\u002F\u002Fapi.stadiamaps.com\u002Fgeocoding\u002Fv2\u002Fautocomplete?text=Union+Squa&lang=en\n```\n\nThe response is a GeoJSON `FeatureCollection`. Each feature includes coordinates, parsed address components, layer, confidence score, and source attribution. Full response format details are in the [Common Response Format docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fapi-response-format\u002F).\n\nFor most applications, the [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F), [SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F), or [Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F) will be faster than building a UI on top of the raw API. For runnable code against the HTTP endpoint in TypeScript, Python, Kotlin, Swift, PHP, or cURL, see the [Autocomplete Search API docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F).\n\n## Where Address Autocomplete Falls Short\n\nAutocomplete is not the right tool for every search interaction. Real limits worth knowing:\n\n- **Autocomplete does not interpolate addresses.** If a specific house number does not exist in the underlying data, forward geocoding can estimate it from surrounding addresses. Autocomplete cannot. Fall back to [forward geocoding](\u002Flearn\u002Fgeocoding\u002F) once the user finalizes their query.\n- **Very short queries are noisy.** A one-character query returns hundreds of matches. The Stadia Maps SDKs default to a 3-character minimum. Lowering that produces bad UX.\n- **Ranking is context-dependent.** Without a `focus.point` or a boundary, \"Springfield\" could match any of dozens. Provide a focus point or country hint whenever possible.\n- **Layer choice affects results.** If you only need addresses and POIs, exclude administrative layers to speed things up. If you only need administrative context, use `layers=coarse` for the fastest possible search.\n- **Two providers rarely agree exactly.** Different providers use different data, different scoring, and different ranking logic. Standardize on one provider to keep your product consistent.\n\n## Address Autocomplete vs. Forward Geocoding: Which Do You Need?\n\nBoth convert human-readable place input into coordinates. They optimize for different phases of the user interaction.\n\n- Use **[address autocomplete](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F)** while the user is still typing. Fast responses, partial input, ranked suggestions.\n- Use **[forward geocoding](\u002Flearn\u002Fgeocoding\u002F)** once the user finalizes their query (for example, by pressing Enter or submitting a form). Better accuracy on complete input, and forward geocoding can interpolate house numbers that autocomplete cannot.\n\nThe MapLibre GL JS Search Box plugin can automatically switch to the forward geocoding endpoint on Enter via the `searchOnEnter` option, if your plan includes the forward geocoding endpoint. See the [Stadia Maps pricing page](\u002Fpricing\u002F) for plan details.\n\n## Common Address Autocomplete Use Cases\n\nAutocomplete appears wherever a product asks a user to enter a real-world place.\n\n- **Checkout and shipping forms.** Users select their delivery address from suggestions instead of typing the full string. Fewer errors, faster completion, and higher form conversion.\n- **Ride-share and delivery pickup.** Rider or customer picks their pickup or drop-off from a search field. Focus point is set to the current GPS location so nearby options rank first.\n- **Store locator and site finder.** User types a city or zip code and the map centers on the selected result.\n- **Map-based search interfaces.** Real estate, travel, and outdoor apps let users search for places directly on the map.\n- **Data entry and CRM lookup.** Sales and support tools use autocomplete to attach a canonical place to a record.\n- **Point-of-interest discovery.** Restaurants, hotels, landmarks, and businesses surface as venues the user can select without knowing the full name.\n\n## Frequently Asked Questions\n\n### What is address autocomplete used for?\n\nAddress autocomplete is used to suggest places, addresses, and points of interest as a user types. It powers search-as-you-type experiences in checkout flows, store locators, ride-share pickup selection, and any interface where a user needs to find and select a real-world location quickly.\n\n### What is the difference between address autocomplete and forward geocoding?\n\nAutocomplete is optimized for speed on partial input. [Forward geocoding](\u002Flearn\u002Fgeocoding\u002F) is optimized for accuracy on complete input and can interpolate addresses. Use autocomplete for interactive search-as-you-type; switch to forward geocoding when the user finalizes the query, for example by pressing Enter.\n\n### Which SDKs does Stadia Maps offer for address autocomplete?\n\nStadia Maps offers three first-party SDKs for address autocomplete: the [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) for the web, [SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F) for iOS, and [Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F) for Android. Each handles debouncing, caching, and result ordering out of the box. If none fit, the underlying HTTP API is available directly.\n\n### What are the default autocomplete timing and input settings on Stadia Maps?\n\nThe Stadia Maps autocomplete SDKs default to a 100ms minimum wait period between requests (`minWaitPeriodMs`) and a 3-character minimum input length (`minInputLength`). The [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) also defaults `maxResults` to 5. These defaults balance server load with responsiveness.\n\n### How is an address autocomplete request billed on Stadia Maps?\n\nAutocomplete requests are billed from the unified [Stadia Maps API](\u002Fpricing\u002F) credit pool, the same pool that covers forward geocoding, reverse geocoding, routing, and tiles. Each autocomplete request is a single billable request.\n\n## Where to Go Next\n\n### From the Blog\n\nMore on geocoding and search from the Stadia Maps blog:\n\n- [The Hidden Cost of Search: Why Your Geocoding Bill Is Higher Than It Should Be](\u002Fblog\u002Fwhy-is-your-geocoding-bill-higher-than-it-should-be\u002F)\n- [The Open Data Superpower: Why Global Search Is Moving Beyond Proprietary Silos](\u002Fblog\u002Fopen-data-geocoding-global-search\u002F)\n- [Precision Meets Privacy: Elevating the Consumer Search Experience](\u002Fblog\u002Fprecision-meets-privacy-consumer-search-experience\u002F)\n- [Autocomplete Search for SwiftUI and Jetpack Compose](\u002Fblog\u002Fautocomplete-search-for-swiftui-and-jetpack-compose\u002F)\n- [Introducing Geocoding & Search v2](\u002Fblog\u002Fintroducing-stadia-maps-geocoding-search-v2\u002F)\n\n### Geocoding & Search\n\n- [What Is Geocoding?](\u002Flearn\u002Fgeocoding\u002F) for the complete forward-direction overview\n- [What Is Reverse Geocoding?](\u002Flearn\u002Freverse-geocoding\u002F) for the opposite direction\n- [Autocomplete Search API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) for the full parameter set\n- [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) for the web\n- [SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F) for iOS\n- [Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F) for Android\n- [Layers documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Flayers\u002F) for the full list of returnable place types\n- [Sources documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F): the five open data providers behind the API\n- [Autocomplete Search product page](\u002Fproducts\u002Fgeocoding-search\u002Fautocomplete-search\u002F) and pricing tiers\n",{"id":594,"bio":564,"extension":18,"jobTitle":564,"meta":595,"name":596,"sameAs":597,"slug":600,"stem":601,"twitterCreator":564,"type":602,"url":603,"__hash__":604},"authors\u002Fauthors\u002Fstadia-maps.yml",{},"Stadia Maps",[598,599],"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fstadia-maps\u002F","https:\u002F\u002Fgithub.com\u002Fstadiamaps","stadia-maps","authors\u002Fstadia-maps","Organization","https:\u002F\u002Fstadiamaps.com\u002F","jRSutfRcYEknA-OSdkWoPHgm7Iep6BJfLBIsMtzQONk",1787151418563]