# Geocoding and Search APIs ::advantage-row --- subtitle: Effortlessly pinpoint places, addresses, and POIs title: Geocoding --- Convert place names into geographic coordinates and vice versa, facilitating precise address-to-coordinate conversions and city or country lookups. :learn-more-link{product-name="Geocoding" to="https://stadiamaps.com/geocoding/"} :: ::advantage-row --- subtitle: Find your place, instantly title: Autocomplete Search --- Enable users to find addresses, venues, cities, and postal codes quickly through an interactive search interface, enhancing user experience in applications. :learn-more-link{product-name="Autocomplete Search" to="https://stadiamaps.com/autocomplete-search/"} :: --- ::advantage-row --- subtitle: Growing user demand and data volume? We’ve got you covered. title: Scalable APIs and Transparent Pricing to Fuel Your Growth --- - [Performant, highly-available, and global infrastructure](https://stadiamaps.com/infrastructure/) for reliable, low-latency access - [High-quality SDKs](https://docs.stadiamaps.com/sdks/overview/){rel=""external""} for easy development and error handling - Batch requests and refine queries for precision and efficiency - Easily monitor API usage to understand and control costs :: ::advantage-row{subtitle="Pricing that grows with you."} - Fixed, transparent pricing that scales with your business - No upfront costs—build and test risk-free with a 14-day free trial - Full access to services without hidden fees :::stadia-button --- to: https://stadiamaps.com/faqs/#free-trials variant: secondary --- See our Free Trials & Billing FAQs ::: :: ::advantage-row{subtitle="Support you can count on."} - Responsive, knowledgeable human support - [High-quality SDKs](https://docs.stadiamaps.com/sdks/overview/){rel=""external""} for every platform - Easy-to-follow documentation for seamless integration :::stadia-button{to="https://stadiamaps.com/support/" variant="secondary"} Learn more about our support experience ::: :: # Autocomplete Search API | Place Autocomplete ::advantage-row --- invert-header-tags: true subtitle: Create immersive experiences for users to discover the right place to begin their journey. title: The adventure begins when you find where to start. --- Optimized for speed and partial user input, Stadia Maps Autocomplete Search focuses search around a location or limit by region, country, or bounding box. - Search for places by name or address - Suggest addresses, points of interest, and more as users type, enabling interactive geospatial applications - Choose from layers addresses, venues, cities, postal codes, and more at the touch of a finger :product-cta{docs-link="https://docs.stadiamaps.com/geocoding-search-autocomplete/autocomplete/" product-name="Autocomplete Search"} :: ::div{.block.content} :::advantage-row{title="Try it out yourself!"} ::::cross-platform-map --- search-options: searchOnEnter: true use-search: true use-theme-switcher: false zoom: 5 style: "height: 400px" theme: outdoors --- :::: ::: :: ::advantage-row{title="Customizable & Easy-to-use"} Our [MapLibre GL JS plugin](https://github.com/stadiamaps/maplibre-search-box){rel=""external""}, [SwiftUI view](https://github.com/stadiamaps/swiftui-autocomplete-search){rel=""external""}, [Jetpack Compose integration](https://github.com/stadiamaps/jetpack-compose-autocomplete-search){rel=""external""}, and [Leaflet compatibility](https://docs.stadiamaps.com/geocoding-search-autocomplete/autocomplete/#ready-to-go-integrations){rel=""external""} provide a complete search UI out of the box. You can also [build your own bespoke integration](https://docs.stadiamaps.com/geocoding-search-autocomplete/autocomplete/#using-the-api-directly){rel=""external""} with our official SDKs for ultimate control. :product-cta{docs-link="https://docs.stadiamaps.com/geocoding-search-autocomplete/autocomplete/" product-name="Autocomplete Search" product-type="SDK"} :: # Geocoding APIs | Address Lookup & Place Search ::advantage-row --- subtitle: Convert place names or addresses to coordinates, improve location accuracy, and process large datasets efficiently. title: Lightning-Fast & Dependable Geocoding --- - Fast results with reliable uptime - Intelligent approximation technology locates unmapped addresses - Built on a comprehensive global address database for enhanced accuracy :: ::advantage-row --- subtitle: Fast, flexible results for any query title: Geocoding APIs --- Search for places by name, address, or structured components to obtain details like location, postal code, and website; geocode thousands of addresses in bulk with a single API call; and discover nearby addresses, cities, and states using reverse geocoding. #### Forward Geocoding Convert addresses, points of interest, and place names into coordinates effortlessly. :product-cta{docs-link="https://docs.stadiamaps.com/geocoding-search-autocomplete/search/" product-name="Forward Geocoding"} #### Structured Geocoding For additional refinement and precision with known address components, use our Structured Geocoding API. :product-cta{docs-link="https://docs.stadiamaps.com/geocoding-search-autocomplete/structured-search/" product-name="Structured Geocoding"} #### Reverse Geocoding Seamlessly transform coordinates back into places, tailor searches to specific regions or countries. Refine with filters by data source, result type, or polygon. :product-cta{docs-link="https://docs.stadiamaps.com/geocoding-search-autocomplete/reverse-search/" product-name="Reverse Geocoding"} #### Bulk Geocoding Process large datasets by allowing up to 5,000 queries in a single request. Supports all Geocoding queries and filters, and offers the same flexible response formats for different integration needs. :product-cta{docs-link="https://docs.stadiamaps.com/geocoding-search-autocomplete/bulk-geocoding-search/" product-name="Bulk Geocoding"} :: # Time Zones | Geospatial Data ::advantage-row{title="Powered by Precision"} Hyper-accurate time zone data for a specific point on earth and moments in time. - Built on the authoritative IANA Time Zone Database (tz database) for reliable and up-to-date information - Base UTC offset and any applicable Daylight Saving Time (DST) offset in seconds - Localized timestamp in both RFC 2822 and RFC 3389 formats :product-cta{cta-text="Explore our Time Zone API" docs-link="https://docs.stadiamaps.com/tz/" product-name="Time Zone API"} :: ::advantage-row{title="Past, Present, or Future"} The Stadia Maps Time Zone API provides the time intelligence needed to solve real-world problems in logistics and delivery, event management, Internet of Things (IoT), telematics, and travel and navigation apps. - Optimize delivery routes and provide accurate estimated arrival times by accounting for time zone changes across different regions - Plan and display global events, ensuring users see event times in their local time zone - Synchronize data streams from globally distributed devices with precise, localized timestamps - Enhance the user experience by displaying the local time for destinations, points of interest, or real-time travel updates :product-cta{cta-text="Try for free today" docs-link="https://docs.stadiamaps.com/tz/" product-name="Time Zone API"} :: ::advantage-row{title="Why Stadia Maps?"} We designed our Time Zone API for simplicity and accuracy. Pay only for what you need. Unlike competitors, who may bundle time zone data as a secondary feature within a more complex API, our dedicated endpoint ensures easy integration and a clear focus on a single task. - A purpose-built tool that gives you exactly what you need without the overhead of a larger, multi-functional API - Straightforward JSON responses, unlike competitor services that might require you to use complex tile-querying methods to get the same data - Economical for applications where time zone lookup is a primary or critical function :product-cta{cta-text="Get started today" docs-link="https://docs.stadiamaps.com/tz/" product-name="Time Zone API"} :: # Stadia Maps Location Platform ::advantage-row --- subtitle: Give your spatial data context with interactive basemaps, static maps, and map styles. title: Maps --- Maps make the world go 'round (or so we like to believe). Allow your data to shine with our [beautiful Map Styles](https://stadiamaps.com/products/maps/map-styles/), each tastefully designed to delight. In all corners of the globe, our maps help you create beautiful map experiences. :::stadia-button{to="https://stadiamaps.com/products/maps/" variant="secondary"} Learn more about Maps ::: :: --- ::advantage-row --- subtitle: Build flexible search experiences for the frontend. Find and verify addresses on the backend. title: Geocoding & Search --- Most maps need a search box, and a lot of cron jobs need a reliable search and verification backend. Use our geocoding and autocomplete solutions to add a little natural language and coordinate intelligence to your product. :::stadia-button --- to: https://stadiamaps.com/products/geocoding-search/ variant: secondary --- Learn more about Geocoding & Search ::: :: --- ::advantage-row --- subtitle: Save time, reduce costs, and reduce emissions all while getting from A to B. title: Routing & Navigation --- Need to get from point A to point Z? Have to make a stop at points B, C, and X? Make a quick call to our turn-by-turn routing engine. Choose from multiple modes of travel (auto, motorcycle, bicycle, etc.). Ask for an optimized route to reduce emissions, save time, and cut costs. Find the best route for your bike with elevation-influenced routing. Visualize urban mobility with isochrones. From Australia to Argentina, we'll help you get from here to there. :::stadia-button --- to: https://stadiamaps.com/products/routing-navigation/ variant: secondary --- Learn more about Routing & Navigation ::: :: --- ::advantage-row --- subtitle: Find the data you need, even if it's off the beaten path. title: Geospatial APIs --- Sometimes location applications require that little bit of extra time zone data from here and a dash of bathymetric polygons from over there. Our Geospatial APIs make your life easier by providing a one-stop shop for all the little bits of location data your applications need. :::stadia-button --- to: https://stadiamaps.com/products/geospatial-apis/ variant: secondary --- Learn more about Geospatial APIs ::: :: --- ::advantage-row --- subtitle: Bring the power of the Stadia Maps Location Platform to any application, even if it's behind strong firewalls or disconnected from the network. title: On-Premises and Embedded Solutions --- Power secure intranet applications and mobile apps beyond the reach of networks. Our offline or on-site hosting solution delivers most of our products customized for you. Our On-Prem & Embedded Solutions team will work with you to tailor a solution that meets your organization's needs for on-site or offline map tiles and geospatial APIs. :::stadia-button --- to: https://stadiamaps.com/products/on-prem-embedded/ variant: secondary --- Learn more about On-Prem & Embedded Solutions ::: :: # Interactive Basemaps | Vector & Raster Tiles ::advantage-row --- invert-header-tags: true subtitle: Get up and running with just a few lines of code. title: Dynamic Experiences --- Build interactive maps for your website using [MapLibre](https://maplibre.org/){rel=""external""} (which we helped start!), [Leaflet](https://leafletjs.com/){rel=""external""}, or [OpenLayers](https://openlayers.org/){rel=""external""}. Users can explore geographic data by zooming, panning, and interacting with layers for deeper insights and context. - Seamlessly integrate with [React](https://react.dev/){rel=""external""}, [Angular](https://angular.dev/){rel=""external""}, and [Vue.js](https://vuejs.org/){rel=""external""}. - Leverage popular [rendering libraries](https://docs.stadiamaps.com/maps-for-web/){rel=""external""} for smooth integration. - Adapt the setup with our bindings or wrapper components for your preferred framework. Create interactive maps for native and cross-platform apps. Allow users to explore geographic data by zooming, panning, and interacting with layers for deeper insights and context. Support for [MapKit](https://developer.apple.com/documentation/mapkit/){rel=""external""}, [Flutter](https://flutter.dev/){rel=""external""}, [React Native](https://reactnative.dev/){rel=""external""}, and almost any other open-source or proprietary mapping SDK. #image ![Example of a Map](https://stadiamaps.com/static/alidade_smooth?center=41.8602,-87.6174\&zoom=12\&size=600x400@2x\&manual_attribution=true):br :::stadia-button --- to: https://stadiamaps.com/explore-the-map/ variant: secondary --- Explore Our Maps ::: :: ::advantage-row --- invert-header-tags: true subtitle: Optimize Delivery and User Interaction title: Your Maps, Your Way --- With our Map Tiles, you can deliver visually engaging, data-rich experiences that enhance usability and keep your audience engaged. - **Flexible formats.** Choose between vector and raster tiles built on OpenStreetMap, Natural Earth, and other premier open data sets. - **Complete control.** Style maps your way with vector Map Tiles. Smooth zooming and scrolling and lighter downloads allow you to mix and match your data into the perfect form with a bit of flair. - **Universal support.** Raster Map Tiles can be used with almost any mapping library, making them reliable, versatile, and ready for any task. #### Vector Map Tiles Build fully customizable maps with our Vector Map Tiles. :product-cta{docs-link="https://docs.stadiamaps.com/vector/" product-name="Vector Map Tiles"} #### Raster Map Tiles Use a map anywhere with our Raster Map Tiles. :product-cta{docs-link="https://docs.stadiamaps.com/raster/" product-name="Raster Map Tiles"} #image ![Bathymetry Data](https://stadiamaps.com/images/content/tiles-natural-earth-bathymetry.png) :: ::advantage-row --- invert-header-tags: true subtitle: Map Styles that highlight the right context for every situation title: Visual Clarity, Flexibility & Performance --- Select the perfect combination of detail and decor with Map Styles for unparalleled visual clarity, flexibility, and performance. Our homegrown Map Styles are constantly refined based on customer feedback. :: :map-style-slider # Map Styles | Customizable Map Themes ::div{.content} ## Beautiful context for any situation We offer up a comprehensive collection of map styles, chosen from a selection of open source styles, our own home-grown styles, and our exclusive collaboration with Stamen Maps. Choose the best combination of detail and design for your integration. Using vector maps? [Customize Map Styles to your needs.](https://stadiamaps.com/customize) ## Stadia Maps Styles :::maplibre-style-preview --- center-lat: 59.438484 center-lng: 24.742595 zoom: 14 map-style: alidade_smooth name: Alidade Smooth --- Alidade Smooth is a lightly saturated style tailored for Basemaps with overlays or markers and designed to let your data take center stage. ::: :::maplibre-style-preview --- center-lat: 59.438484 center-lng: 24.742595 zoom: 14 map-style: alidade_smooth_dark name: Alidade Smooth Dark --- If Alidade Smooth helps your data shine during the day, Alidade Smooth Dark lets it shine all night. Featuring a dark background, tuned colors that are easy on the eyes, and just the right amount of data, Alidade Smooth Dark is perfect for when you just need a bit more…*dark*. ::: :::maplibre-style-preview --- center-lat: 65 center-lng: -18 zoom: 5 map-style: alidade_satellite name: Alidade Satellite --- Carrying on the tradition of the Alidade family of styles, Alidade Satellite turns the earth into your canvas. This style uses Satellite Imagery as a base and layers labels and outlines of major features on top to create a solid contextual backdrop for your data. ::: :::maplibre-style-preview --- center-lat: 47.349444 center-lng: 8.491389 zoom: 14 map-style: outdoors name: Outdoors --- Outdoors—where we'd all rather be—is custom-designed to display the features that matter to the adventurers, hikers, and trailblazers in your life. With detailed data on mountain peaks, hiking trails, and national parks, your users can always find the next excursion right around the corner or across the world. ::: ## Classic Styles Familiar styles that you've likely seen around the web. :::maplibre-style-preview --- center-lat: 43.653 center-lng: -79.38 zoom: 14 map-style: osm_bright name: OSM Bright --- OSM Bright is a stalwart in the world of OpenStreetMap maps. We offer it without any substantial changes for your mapping enjoyment. Use OSM Bright where your users need lots of POIs, in dense city environments, or where a touch of the classic style is all you need. ::: ## Stadia × Stamen Based on the original basemaps created for the Knight Foundation, the Stadia × Stamen partnership fuses Stamen’s tradition of beautiful, functional maps with the Stadia Maps Location Platform, making it affordable and accessible to anyone. :::maplibre-style-preview --- center-lat: 52.5067614 center-lng: 13.3846512 zoom: 14 map-style: stamen_toner name: Stamen Toner --- The most popular of the excellent styles from Stamen Design, these high-contrast B+W (black and white) maps are the perfect backdrop for your colorful and eye-catching overlays. ::: :::maplibre-style-preview --- center-lat: 47.35 center-lng: 9.3435 zoom: 10 map-style: stamen_terrain name: Stamen Terrain --- Orient yourself with the Stamen terrain maps, featuring hill shading and natural vegetation colors. ::: :::maplibre-style-preview --- center-lat: 52.5067614 center-lng: 13.3846512 zoom: 14 map-style: stamen_watercolor name: Stamen Watercolor --- Reminiscent of hand-drawn maps, the watercolor maps from Stamen Design apply raster effect area washes and organic edges over a paper texture to add warm pop to any map. ::: :: # Satellite Imagery Maps | High-Resolution Tiles ::advantage-row --- title: Vivid colors and consistency --- In mapping, aerial and satellite imagery is the picture worth a thousand words, so every pixel counts. Experience “true colors” at higher zoom levels that showcase the unique beauty of each location. Balance regional flair with a cohesive global palette. Consistent colors across all zoom levels provide better data overlays and a smoother user experience. :::stadia-button --- to: https://stadiamaps.com/explore-the-map/#style=alidade_satellite&map=5/23/-77.813 variant: secondary --- Explore the Map ::: #image ![Satellite Imagery Bahamas](https://tiles.stadiamaps.com/static/alidade_satellite.jpg?center=23,-77.813\&zoom=5\&size=600x400@2x\&manual_attribution=true) :: ::advantage-row --- title: Fresh and Up-to-date --- Most cities and populated areas are no more than a year old, and new imagery is added all the time. The oldest pixels on the map are no more than three years old. #image :testimonial{slug="markus-shadowmap"} :: ::advantage-row --- title: A Sharper World --- - **Zoom 18 global coverage** - **1.5m or better pixel resolution.** Ultra-sharp 50 cm resolution across most of North America, Europe, and urban hubs worldwide with stunning 30 cm resolution for areas where precision matters most. - **Cloudless** experience with less than 5% cloud cover globally and under 2% over urban areas, ensuring clear visuals every time. #image ![Satellite Imagery CDG Airport](https://tiles.stadiamaps.com/static/alidade_satellite.jpg?center=49.004414,2.575556\&zoom=14\&size=600x400@2x\&manual_attribution=true) :: # Static Maps API | Embeddable Map Images ::advantage-row --- invert-header-tags: true subtitle: Embed Static Maps using the HTML img tag or ImageView title: Effortless Control --- Simple, lightweight, and compatible across platforms. All you need is a URL. Reduce load times, configure map design, and control user interaction. :product-cta{docs-link="https://docs.stadiamaps.com/static/" product-name="Static Maps"} #image ![Example of a Static Map: Simple Satellite Imagery](https://stadiamaps.com/static/alidade_satellite.jpg?center=0,0\&zoom=2\&size=600x400@2x) :: ::advantage-row --- invert-header-tags: true subtitle: Effortlessly configure Static Maps to fit your needs title: Your Maps, Your Way --- - **Flexible Sizing & Annotations:** Adjust static map dimensions and add meaningful annotations to bring your data to life. - **Dynamic Pin Placement:** Highlight up to 1,000 locations with a palette of virtually unlimited colors. - **Versatile Pin & Route Styling:** Combine unique pin styles with polylines to visualize routes or areas of interest using customizable colors and widths. - **Customizable Markers:** Add personalized markers with custom images or optional labels. Each marker is defined by latitude and longitude with options to fine-tune its appearance. #image ![Example of a Static Map: Tallinn with a route between multiple waypoints](https://stadiamaps.com/static/alidade_smooth?l=oj_kpBkhmen@vFvDlStSdIzN%60BxCfMfShA%60B~@%7CAvCrDpG%60FfVfRb%5CzSrBdBhZx%5CpFdM~BpFn@zAxCrHrH%7CQjOh_@NtM%7CVv@d@aHdHEfD%5E%5CDhCh@nIjFlFvE~CfCzAzAdFjFt@t@~EdG%5DcEc@%7BFm@uF%5DoDgAwJhAm@vMqGoAs%7B@dAMfG_@dE_@Ezb@ExWzBBZ?L@%7CDnTtAqE~CyMp@sB%7C@n@XUx@uBjAiApBi@lBp@hAtAzAClSjJzAkMtAl@dA%7D@~CVbB%60@pDtAN%7DDxD%60AdFi@vBIxBIe@aMuAgPyFwy@%7BCa_@yFar@%5B%7BC_AsGuAkGqEgY_CmLqAuFuHi%5Bm@vBq@hC,333333,5\&m=59.436884,24.742595\&m=59.437485,24.743150\&m=59.434931,24.745442\&m=59.441293,24.747380\&m=59.435561,24.747605\&size=600x400@2x) :: ::advantage-row --- invert-header-tags: true subtitle: Do more with Static Maps title: Printable & Cacheable --- If you’re using the same map in different locations—for example, an event location or fixed tour route that rarely changes—our cacheable endpoint allows you to store a copy as long as you maintain a paid subscription. Print maps for your next advertising campaign, book, presentation, PDF, or other project. Paid subscriptions allow for up to 5000 copies per image. :product-cta{docs-link="https://docs.stadiamaps.com/static-maps/#url-format" product-name="Cacheable Static Maps"} :: ::advantage-row --- invert-header-tags: true subtitle: Map Styles that highlight the right context for every situation title: Visual Clarity, Flexibility & Performance --- Select the perfect combination of detail and decor with Map Styles for unparalleled visual clarity, flexibility, and performance. Our homegrown Map Styles are constantly refined based on customer feedback. :: :map-style-slider # Routing and Navigation APIs ::advantage-row --- subtitle: Smarter navigation experiences title: Turn-by-Turn Directions --- Reliable routing and map matching with precise turn-by-turn guidance, trip optimization, distance, and travel time calculations. :learn-more-link{product-name="Turn-by-Turn Directions" to="https://stadiamaps.com/turn-by-turn-directions/"} :: ::advantage-row --- subtitle: Enhanced route data for navigation and planning title: Road Information --- Pinpoint the closest street to a location or access detailed road information such as posted speed limits, grades, signs, or surface quality. :learn-more-link{product-name="Road Information" to="https://stadiamaps.com/road-information/"} :: ::div{.message.is-info.is-light} :::div{.message-body} ## Build cross-platform apps ### Deliver accurate routes that adapt to real-world conditions with [Ferrostar, our real-time navigation SDK](https://stadiamaps.com/ferrostar-navigation-sdk). ::::div{.content} Ferrostar adds real-time navigation to your applications, powered by [Turn-by-Turn Directions](https://stadiamaps.com/turn-by-turn-directions) and [Road Information](https://stadiamaps.com/road-information). - Develop for multiple platforms with ease - Change off-route detection logic or swap location providers - Build a UI from reusable components - Write business logic once and use it across platforms :::: ::: :: ::advantage-row --- subtitle: Ideal for complex, multipoint routing title: Matrix Routing --- Build on rapid calculation of travel times and distances between multiple locations to help optimize overall performance. :learn-more-link{product-name="Matrix Routing" to="https://stadiamaps.com/matrix-routing/"} :: ::advantage-row{subtitle="Reachable range decision-making" title="Isochrones"} Calculate areas by travel time and visualize locations that can be reached within a specified time or distance from a given location. :learn-more-link{product-name="Isochrones" to="https://stadiamaps.com/isochrones/"} :: --- ::advantage-row --- subtitle: Growing user demand and data volume? We’ve got you covered. title: Scalable APIs and Transparent Pricing to Fuel Your Growth --- - [Performant, highly-available, and global infrastructure](https://stadiamaps.com/infrastructure/) for reliable, low-latency access - [High-quality SDKs](https://docs.stadiamaps.com/sdks/overview/){rel=""external""} for easy development and error handling - Batch requests and refine queries for precision and efficiency - Easily monitor API usage to understand and control costs :: ::advantage-row{subtitle="Pricing that grows with you."} - Fixed, transparent pricing that scales with your business - No upfront costs—build and test risk-free with a 14-day free trial - Full access to services without hidden fees :::stadia-button --- to: https://stadiamaps.com/faqs/#free-trials variant: secondary --- See our Free Trials & Billing FAQs ::: :: ::advantage-row{subtitle="Support you can count on."} - Responsive, knowledgeable human support - [High-quality SDKs](https://docs.stadiamaps.com/sdks/overview/){rel=""external""} for every platform - Easy-to-follow documentation for seamless integration :::stadia-button{to="https://stadiamaps.com/support/" variant="secondary"} Learn more about our support experience ::: :: ::div{.content} ## Stadia Maps supports the open-source community! In addition to using OpenStreetMap as our primary data source, we maintain and contribute to several open-source projects, including: - [Valhalla](https://github.com/valhalla/valhalla){rel=""external""}: A powerful routing engine - [Ferrostar](https://docs.stadiamaps.com/sdks/ferrostar/?utm_source=marketing_site&utm_campaign=routing_navigation&utm_content=routing_navigation_product_page){rel=""external""}: A leading FOSS navigation SDK :: # Elevation | Geospatial Data ::advantage-row{title="Elevation at Your Fingertips"} We designed our Elevation API to be straightforward and user-friendly, delivering the most accurate and precise elevation data directly to you. - Get the elevation of a single point or an entire elevation profile along a path - Access high-resolution elevation data for any location on Earth, from the lowest valleys to the highest mountain peaks - Our data is sampled at a high resolution (30m or better), ensuring you get a true-to-life representation of the terrain - Unlike competitors who require complex tile decoding, our API returns elevation data in a simple, straightforward JSON response :product-cta{cta-text="Explore our Time Zone API" docs-link="https://docs.stadiamaps.com/tz/" product-name="Time Zone API"} :: ::advantage-row{title="Past, Present, or Future"} Solve real-world problems by providing the accurate vertical data required for a variety of applications. - Optimize delivery routes for large vehicles by avoiding steep grades or low-clearance areas - Provide elevation profiles for hiking, biking, and running routes, helping users prepare for their journey - Use elevation data to understand the grade changes a vehicle or device experiences - Integrate elevation data into applications for site surveys, civil engineering, and urban planning :product-cta{cta-text="Explore our Time Zone API" docs-link="https://docs.stadiamaps.com/tz/" product-name="Time Zone API"} :: ::advantage-row{title="Why Stadia Maps?"} We designed our Elevation API to be simple, direct, and developer-friendly, offering a compelling alternative to more complex solutions. - Direct elevation values eliminate the need for you to set up complex tile-decoding logic - A dedicated endpoint for elevation saves time wading through a sea of other functionalities to get the data you need - Straightforward JSON responses, meaning you can get the elevation data with a single, simple request - Economical and predictable for a wide range of use cases :product-cta{cta-text="Explore our Time Zone API" docs-link="https://docs.stadiamaps.com/tz/" product-name="Time Zone API"} :: # Ferrostar Navigation SDK | Cross-Platform Navigation ::advantage-row{title="Turn-by-Turn Navigation Made Simple"} Ferrostar gives you complete control over the navigation experience, whether you're building for foot, bike, car, or custom routing scenarios. - Customizable navigation behavior to suit any mode of travel - Support for real-time updates and rerouting - Works seamlessly with [Stadia Maps Routing APIs](https://stadiamaps.com/products/routing-navigation/) :::advantage-row{title="Cross-Platform by Design"} With a shared core and platform-native UI, Ferrostar delivers consistent behavior across multiple platforms, including Android, iOS, and the web. - Native support for Android, iOS, and PWAs - Core logic shared across environments - Consistent APIs make it ideal for multi-platform applications ::::advantage-row{title="Reliability and Speed"} Ferrostar’s navigation logic is written in Rust, a systems programming language known for its memory safety and performance, ensuring efficient resource utilization and fewer runtime bugs. - Zero-cost abstractions for maximum efficiency - Compile-time guarantees that eliminate many classes of bugs - Predictable, high-performance execution :::: ::: :: ::advantage-row{title="High-Performance, Open-Source Foundation"} Ferrostar provides a robust, efficient, and flexible foundation for your applications, fostering innovation and control as a BSD-licensed, open-source project hosted on GitHub and backed by a vibrant, growing community. :: ::advantage-row{title="What Makes Ferrostar Different?"} - **Modular UI & Logic:** Built with composable UI frameworks (SwiftUI, Jetpack Compose) for unmatched customization. - **Open-Source Empowerment:** Direct source code access for deeper modifications, custom integrations, and bug patches. - **Modern Tooling & Ecosystem:** Leverages the Rust toolchain for safety, performance, and cross-compilation. :: ::advantage-row{title="Perfect Fit for These Use Cases"} - Logistics and delivery apps - Ride-sharing or fleet tracking solutions - Outdoor recreation and fitness tracking - Smart mobility and autonomous systems :: --- ::advantage-row{title="Start Building with Ferrostar"} Ready to integrate Ferrostar into your product or app? Check out our [Ferrostar SDK Docs](https://docs.stadiamaps.com/sdks/ferrostar/?utm_source=marketing_site&utm_content=footer%22){rel=""external""}. :: # Isochrone API | Reachable Range ::advantage-row --- subtitle: Answer your mobility, planning, and accessibility questions with Isochrones. title: Reachable Range --- - *How far can you travel in 15 minutes?* - *Where's the best charging station for my electric vehicle?* - *How walkable is this neighborhood?* - *What's reachable in that last 20 miles before you run out of gas?* :product-cta{docs-link="https://docs.stadiamaps.com/routing/isochrones/" product-name="Isochrones"} :: ::advantage-row{title="Flexible Control"} - Nearly a dozen travel modes, including auto, bicycle, and pedestrian, for tailored analyses based on time and distance - Define constraints such as maximum travel time or distance for flexibility in determining reachable areas - Specify contours based on time or distance with customizable colors :product-cta{docs-link="https://docs.stadiamaps.com/routing/isochrones/" product-name="Isochrones"} :: ::advantage-row{title="Simple Integration"} Integrate our Isochrones with other Stadia Maps services, like the Matrix Routing API, for advanced routing and accessibility analysis. :: # Matrix Routing API | Travel Time & Distance ::advantage-row --- subtitle: Solve complicated route optimization challenges with our highly flexible Matrix Routing. title: Simplified Matrix Routing --- - Support for various vehicle types, including cars, trucks, motorcycles, bicycles, pedestrians, and more - Tunable options such as avoiding specific areas or unsafe roads - Simple integration with OptaPlanner and VROOM to optimize scheduling and fuel consumption - Flexibility for any rich-vehicle routing problem (RVRP) solvers :product-cta{docs-link="https://docs.stadiamaps.com/routing/time-distance-matrix/" product-name="Matrix Routing"} :: ::advantage-row{title="Complementary APIs"} - Routing between addresses? Use our [Forward Geocoding and Structured Geocoding](https://stadiamaps.com/products/geocoding-search/geocoding/) APIs to convert human-readable addresses to latitude and longitude before routing. - Calculate an optimized route for a single vehicle (Traveling Salesman Problem) with [Optimized Routing](https://stadiamaps.com/products/routing-navigation/turn-by-turn-directions/). :: # Road Information API | Speed Limits & Closures ::advantage-row --- subtitle: Diverse use cases across industries — from navigation to urban planning — with support for large-scale applications. title: Real-Time Road Intelligence --- - Precise road data to improve the reliability of your applications - Retrieve nearest road details, saving time and resources - Up-to-date data for dynamic and constantly changing environments :: ::advantage-row --- subtitle: Find Nearby Roads with Pinpoint Accuracy title: Nearest Roads --- Find accurate road and intersection details near specific locations with snapped coordinates, road classification, speed limits, and OpenStreetMap Way IDs. Customize searches with filters and deliver comprehensive edge information such as road surface and location references. :product-cta{docs-link="https://docs.stadiamaps.com/routing/nearest-roads/" product-name="Nearest Roads"} :: ::advantage-row --- subtitle: Every Detail for Your Journey title: Trace Attributes --- Enhance your application with detailed route information, including road names, estimated speed and posted limits, tunnel or bridge details, and max grade and elevation data. Provide the latest road information to ensure accurate routing and conserve user data for a seamless navigation experience. :product-cta{docs-link="https://docs.stadiamaps.com/routing/trace-attributes/" product-name="Trace Attributes"} :: # Traffic-Influenced Routing ::advantage-row --- invert-header-tags: true subtitle: Real-time and predictive traffic for Stadia Maps Routing title: ETAs without the Guesswork --- Most routing assumes the road is always the same. It isn't. Rush hour, accidents, and road closures impact your users, even if your routes don't see them coming. Traffic-Influenced Routing solves these issues by providing: - **Live traffic** for up-to-the-minute precision - **Historical patterns** for accurate, scheduled trip forecasting Your routes and ETAs will finally reflect reality. :product-cta{docs-link="https://docs.stadiamaps.com/guides/getting-the-best-routes-with-valhalla-turn-by-turn-directions-apis/#traffic-influenced-routing" product-name="Traffic-influenced Profiles"} :: ::advantage-row --- subtitle: Skip the contract haggling and lock-in. title: Predictable Pricing --- Our Traffic-Influenced Routing offers two tiers, both with fair, usage-based billing designed to scale with you, not punish you for growth. - **Adaptive traffic** intelligently selects between historical patterns and real-time flow data to provide improved ETAs and route selection. - **Premium traffic** uses all available data for the highest-fidelity routing available. Pick the tier that fits each use case for practical, per-request pricing. :: ::advantage-row --- subtitle: Global traffic intelligence from 600M+ connected devices title: Powered by TomTom --- The same traffic data that powers most of the automotive industry, now available through the Stadia Maps Routing API. :: ::advantage-row --- subtitle: Already using Stadia Maps Routing? title: Drop-in upgrade. Same principles. --- A single profile parameter change is all it takes. Update your existing integration with your current setup. No new endpoints, no rework. Still no tracking of your users and no surprise bills. Traffic intelligence without the tradeoffs. :: ::page-end-c-t-a #title {{ $doc.ctaText }} #subtitle Traffic-Influenced Routing is currently in Public Preview. :br Be the first to start testing and help shape the product before general availability. #cta :::stadia-button{:to="ctaLink" variant="primary"} {{ $doc.ctaText }} ::: :: # Turn-by-Turn Directions API | Navigation SDK ::advantage-row --- subtitle: Ideal for driver or rider apps, in-dash navigation systems, trip planners, and hundreds of other use cases. title: Flexible and efficient routing solutions --- - Global coverage to generate routes for any location on Earth - Language flexibility with instructions in 25+ languages - Go beyond the basics with almost a dozen routing profiles, including car, bicycle, and pedestrian options - Detailed route optimization for visiting multiple stops in an optimal order :: ::advantage-row --- subtitle: Efficient routes for all transportation modes title: Routing APIs --- Find the best routes for cars, trucks, motorcycles, bicycles, pedestrians, and more. Explore hundreds of options from vehicle width to bicycle type and everything in between. #### Standard Routing Standard Routing provides efficient, turn-by-turn directions for various transportation modes, including driving, walking, and cycling. :::product-cta --- docs-link: https://docs.stadiamaps.com/routing/standard-routing/ product-name: Standard Routing --- ::::stadia-button --- to: https://stadiamaps.com/demos/simple-routing/ variant: secondary --- Try the demo! :::: ::: :testimonial{slug="justin-ptc"} #### Optimized Routing Optimized Routing builds on Standard Routing by determining the most efficient sequence for multiple stops, calculating the optimal order to minimize travel time or distance. Our Optimized Routing API is ideal for scenarios such as live delivery routes or multi-destination trips. :product-cta{docs-link="https://docs.stadiamaps.com/routing/optimized-routing/" product-name="Optimized Routing"} :: ::div{.message.is-info.is-light.is-size-4.has-text-centered} :::div{.message-body} [Explore our free guide, “Getting the Best Routes for Your Use Case.”](https://docs.stadiamaps.com/guides/getting-the-best-routes-with-valhalla-turn-by-turn-directions-apis/?utm_source=marketing_site&utm_campaign=turn_by_turn_directions_page&utm_content=free_guide){rel=""external""} ::: :: --- ::advantage-row{subtitle="Convert Points to Routes" title="Map Matching"} Convert your GPS traces or preplanned routes to detailed turn-by-turn guidance with Map Matching. - Align GPS traces to the road network - Correct GPS drift and snap positions to accurate roads - Enhance location accuracy for analyzing travel routes or improving real-time tracking - Works with all routing profiles (yes, even buses and golf carts!) :product-cta{docs-link="https://docs.stadiamaps.com/routing/map-matching/" product-name="Map Matching"} :: # Fall 2024 Credit Schedule Updates For nearly a decade, we’ve helped companies build successful products using location APIs by delivering private, financially scalable services backed by exceptional human support. In the last two years, we’ve launched two major product lines: Geocoding and Satellite Imagery, and, in the background, we’ve significantly expanded our Routing API capabilities. With all of these improvements and new functionality, we’re updating our API credit schedule. Current pricing plans, including base price and additional credit rates, will remain unchanged. Starting October 1st, we're reducing credits used by all Geocoding, Autocomplete Search, and Isochrone APIs. For some Routing and Matrix APIs, we're increasing credits used. We’re also opening the Optimized Routing and Matrix APIs to the Standard Plan, allowing more customers take advantage of our most advanced APIs. ## Even More Affordable Geocoding Our Geocoding product graduated out of beta just over a year ago, and since then, we’ve reached new levels of scale. This allows us to reduce credit used from 30 to 20 credits per API request—a 30% reduction. The update applies to all geocoding and autocomplete search endpoints. ## Improved Routing & Time/Distance Matrix Routing is one of our oldest services, and over the years, we’ve built it into a world-class product, with customizability few providers can match. Today it gets a little bit better. ### Voice & Banner Navigation Aids for Routing & Map Matching Available immediately, our [Routing](https://docs.stadiamaps.com/routing/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} and [Map Matching](https://docs.stadiamaps.com/routing/map-matching/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} APIs will support navigation aids, including detailed maneuver information optimized for display, and voice prompts in over 25 languages. The new navigation aids are available in OSRM format, which is used by many mobile SDKs, including our own [Ferrostar](https://docs.stadiamaps.com/sdks/ferrostar/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""}. Where available, these responses also include detailed intersection information and speed limits in a single API request. Each request including these aids will use 30 credits and are available to all Stadia Maps accounts. ### Bigger, Better Matrices Our [Time/Distance Matrix API](https://docs.stadiamaps.com/routing/time-distance-matrix/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} is a critical component for many logistics applications, including solving the Rich Vehicle Routing Problem. Until now, we’ve had to severely limit our matrix offering. Thanks to recent infrastructure enhancements, we’re excited to introduce the following major improvements: 1. We're opening the Matrix API to Standard Plan users. Previously, this was limited to our Professional and Enterprise Plans. 2. We’re increasing the maximum matrix element count by a factor of 10: from 1,000 to 10,000 (for the Professional Plan). 3. We're offering matrices larger than 10,000 elements by custom agreement. [Contact us to learn more.](mailto\:entsales@stadiamaps.com?subject=Time%2FDistance%20Matrix%20Limits) ### Matrix Billing Updates Matrix API requests will now calculate used credits differently. Instead of a flat number credits per request, the Matrix API will use credits per matrix element. Each matrix element will consume 10 credits, with no additional charge per request. This adjustment reflects the varying sizes of matrix requests and aligns with industry standard practice. It also enables us to support larger matrices more effectively going forward. ### Other Routing Credit Changes Isochrone (reachable range) requests will use fewer credits, at 20 credits per request. Optimized and Standard routing requests will use more credits, at 40 and 20 credits per request, respectively. ## Credit Change Overview Since we’ve made quite a few adjustments to the credit schedule, here’s an overview of the changes: | API | Previous | Updated | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------- | | [Optimized routing](https://docs.stadiamaps.com/routing/optimized-routing/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | 30 credits per request | 40 credits per request & :br available on the Standard Plan | | [Standard routing](https://docs.stadiamaps.com/routing/standard-routing/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | 10 credits per request | 20 credits per request | | [Standard routing (OSRM Format)](https://docs.stadiamaps.com/routing/standard-routing/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | - | 30 credits per request | | [Map matching (OSRM Format)](https://docs.stadiamaps.com/routing/map-matching/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | - | 30 credits per request | | [Matrix](https://docs.stadiamaps.com/routing/time-distance-matrix/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | 30 credits *per request* | 10 credits *per element* & :br available on the Standard Plan | | [Isochrones](https://docs.stadiamaps.com/routing/isochrones/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | 30 credits per request | 20 credits per request | | [Forward Geocoding](https://docs.stadiamaps.com/geocoding-search-autocomplete/search/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | 30 credits per request | 20 credits per request | | [Reverse Geocoding](https://docs.stadiamaps.com/geocoding-search-autocomplete/reverse-search/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | 30 credits per request | 20 credits per request | | [Structured Geocoding](https://docs.stadiamaps.com/geocoding-search-autocomplete/structured-search/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | 30 credits per request | 20 credits per request | | [Autocomplete Search](https://docs.stadiamaps.com/geocoding-search-autocomplete/autocomplete/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | 30 credits per request | 20 credits per request | | [Place Lookup](https://docs.stadiamaps.com/geocoding-search-autocomplete/place-lookup/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} | 30 credits per request | 20 credits per request | ## Learn More & Next Steps - [Create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_campaign=matrix_navigation_credit_updates&utm_content=matrix_navigation_credit_update_news){rel=""external""} to get your API key. You can start building today without a credit card! - Join our community on [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""} or [Slack](https://slack.openstreetmap.us/){rel=""external""} to share what you're working on or get help. - Follow us on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [mailing list](https://eepurl.com/gs51fD){rel=""external""} to stay up to date. # 2024 Satellite Imagery Map Refresh Today, Stadia Maps unveils significant enhancements to our Alidade Satellite style and other imagery offerings. This refresh brings vibrant global color, expands 50cm resolution coverage, introduces 30cm high-resolution imagery in major cities, and refreshes imagery across our entire map portfolio. People use imagery maps every day to understand a location in its “true” visual context: hikers verify trails in stunning clarity, families find their next home—with a porch and lots of trees for the summer, and travelers plan their vacation surroundings in vivid detail. Our latest improvements mean your visual context is not just updated—it's richer, clearer, and more precise. ::cross-platform-map --- center: - 172 - -43.2 scroll-zoom: true use-search: true use-theme-switcher: false zoom: 7 id: map style: "height: 400px;" theme: alidade_satellite --- :: ## A Sharper World: Enhanced Imagery When we first rolled out our imagery maps last year, we were determined to provide a solid baseline level of detail. We started off with a mix of 1.5m resolution (zoom level 16) for the whole world, and then added 50cm resolution (zoom level 18) over about 23 million square kilometers. Now, we're stepping it up by including an additional 4 million square kilometers of 50cm imagery. This update means you get to see more of the world in better detail, from bustling city corners to the quietest, most remote spots. But why stop there? On top of that, we've added over a quarter million square kilometers of 30cm resolution imagery, bringing things into even sharper focus at zoom level 19 and above. It’s just the beginning – we're on a mission to keep boosting our maps with even higher resolution imagery. All in all, with nearly 5 million square kilometers of improved imagery, there's a lot more for us to explore and enjoy. Whether you're planning a hike, finding your next home, or just curious about a new place, the world just got a bit closer to your fingertips. ## Vivid Colors & Fresh Views In imagery maps resolution matters, but the magic really happens in the details—the colors, the clarity, and the freshness of an image. That's why this update isn't just about adding more pixels; it's about making every pixel count. ### Consistency is key. We've made the colors across all zoom levels more consistent, ensuring that no matter how far in or out you're zooming, the experience remains seamless. This means better data overlays and a smoother experience for everyone. At higher zoom levels, we've continued to prefer “true colors” that showcase the unique beauty of each location, balancing regional flair with a cohesive global palette. ### Keeping Things Fresh We're dedicated to keeping our imagery as fresh and current as possible. This update phases out our oldest imagery—some dating back to 2019—with updated imagery. Our oldest imagery is now only a couple of years old. While it isn’t possible to keep an imagery map as up-to-date as we do our street maps, we will keep updating pixels all the time, because the fresher the imagery, the higher the quality of the map you get to explore. ## Next Steps You can get started with our imagery basemap today. Sign up for the new Standard or Professional plan, and turn the earth into your canvas today. - [Get started in MapLibre, Leaflet, OpenLayers or just about any other mapping library!](https://docs.stadiamaps.com/map-styles/alidade-satellite/?utm_source=marketing_site&utm_campaign=2024_satellite_refresh&utm_content=get_started_satellite){rel=""external""} - [Explore the new imagery](https://stadiamaps.com/explore-the-map/#style=alidade_satellite) # 2025 Satellite Imagery Map Refresh Today, Stadia Maps unveils the latest update and enhancements to our [Alidade Satellite](https://stadiamaps.com/products/maps/map-styles/satellite-imagery/?utm_source=marketing_site&utm_campaign=2025_satellite_refresh&utm_medium=blog&utm_content=product_reference){rel=""external""} imagery. This refresh includes expansion of our 30cm data, better mosaicking across multiple resolutions around the globe, and refreshes the imagery in our entire map portfolio. People use imagery maps every day to understand a location in its “true” visual context: hikers verify trails in stunning clarity, families find their next home—with a porch and lots of trees for the summer, and travelers plan their vacation surroundings in vivid detail. Our latest enhancements deliver visual context that’s not just updated—but richer, sharper, and more precise, tailored for every application. ::cross-platform-map --- center: - 172 - -43.2 scroll-zoom: true use-search: true use-theme-switcher: false zoom: 7 id: map style: "height: 400px;" theme: alidade_satellite --- :: ## Higher Definition and Clarity for the Entire World Now, with 10x more 30cm resolution imagery available, you can see small objects, structures, and surface details like never before. We've also expanded our mosaicked data and now offer 20% coverage at 30cm resolution, 54% at 50cm, and full coverage (100%) at 1.5m, providing even more seamless imagery for larger geographic areas. ### Keeping Things Fresh We're dedicated to keeping our imagery as fresh and current as possible. Our oldest imagery is now only a couple of years old. We will continue updating pixels all the time, providing you with the freshest, highest quality basemaps possible. ## Next Steps - You can get started with our [Alidade Satellite](https://stadiamaps.com/products/maps/map-styles/satellite-imagery/?utm_source=marketing_site&utm_campaign=2025_satellite_refresh&utm_medium=blog&utm_content=next_steps){rel=""external""}imagery basemap today: - Our latest imagery is already available to Enterprise, Professional, and Standard subscribers. - Current customers not already on our Standard or Professional plans can [quickly upgrade using our guide](https://docs.stadiamaps.com/upgrading-subscription/?utm_source=marketing_site&utm_campaign=2025_satellite_refresh&utm_content=next_steps&utm_medium=blog){rel=""external""} to gain access now. - If you aren't already using Stadia Maps, [create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_medium=blog&utm_campaign=2025_satellite_refresh&utm_content=next_steps){rel=""external""} and get started with a 14-day free trial to our Professional plan. - [Get started in MapLibre, Leaflet, OpenLayers or just about any other mapping library!](https://docs.stadiamaps.com/map-styles/alidade-satellite/?utm_source=marketing_site&utm_campaign=2025_satellite_refresh&utm_content=get_started_satellite&utm_medium=blog){rel=""external""} - [Explore the new imagery](https://stadiamaps.com/explore-the-map/#style=alidade_satellite) - Follow Stadia Maps on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter/X](https://x.com/@stadiamaps){rel=""external""}, [BlueSky](https://bsky.app/profile/stadiamaps.com){rel=""external""} or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [newsletter](https://eepurl.com/gs51fD){rel=""external""} to hear about exciting developments first. # 2026 Satellite Imagery Update: 37 Million km² at 30cm Resolution If you've built anything on top of satellite imagery, you know the pain of inconsistent resolution. You zoom into one region and get crisp rooftops. Pan over to the next and it's a blurry patchwork from three years ago. That inconsistency isn't just cosmetic: it erodes trust in whatever you're building on top of it. We regularly refresh our [Alidade Satellite](https://stadiamaps.com/products/maps/map-styles/satellite-imagery/){rel=""external""} imagery as new high-resolution data becomes available from Airbus. This update is one of our most significant, expanding both the depth and freshness of our coverage. ::cross-platform-map --- center: - 139.6934 - 35.6857 scroll-zoom: true use-search: true use-theme-switcher: false zoom: 16.5 id: map style: "height: 400px;" theme: alidade_satellite --- :: ## 30cm Coverage, Scaled We now offer 37 million km² of 30cm-resolution satellite imagery, enough detail to distinguish individual vehicles, building footprints, and infrastructure at high zoom levels. For applications like urban planning tools, insurance assessments, or logistics platforms, this is the difference between useful and decorative. This release also adds seamless 30cm country-wide mosaics for Japan, Nigeria, Mexico, the UAE, and Eastern South Africa. "Seamless" matters here: no visible tile boundaries, no abrupt shifts in color or season. Just consistent, high-resolution coverage across the entire country. ## A Fresher Global Baseline Beyond the 30cm expansion, we've completed a full refresh of our 1.5m-resolution dataset covering the Earth's landmasses, derived from the latest SPOT Global layer. Even at lower zoom levels, you're working with current data rather than imagery that's aging out. Freshness matters as much as resolution. Across our entire dataset, the area-weighted average age is roughly 1.6 years. Nearly two-thirds of our coverage is less than a year old, and only 7% is older than three years. That share continues to shrink with each refresh. Combined with our [2025 satellite imagery refresh](https://stadiamaps.com/blog/2025-satellite-imagery-refresh/){rel=""external""}, every pixel in our dataset is still 1.5m or better, with 37 million km² at 30cm and another 7 million km² at 50cm. ## What This Means for Your Stack If you're using Alidade Satellite, these updates are already live. No API changes, no migration. The same tile endpoints now serve fresher, sharper data. Integration works the same way it always has via MapLibre, Leaflet, OpenLayers, or any other mapping library that supports raster tiles. We don't track or profile your end users. The imagery is delivered directly, with no behavioral tracking layer between your application and the tiles. ## Try It The updated satellite imagery is available now for all Stadia Maps customers. If you're new, [create a free account](https://client.stadiamaps.com/signup/){rel=""external""} and see the difference at zoom level 18. # 75 Million More Addresses: Expanding Geocoding Precision Inaccurate geocoding breaks the user experience. If your query returns a street-level guess instead of a rooftop coordinate, a user might be on the right street but the wrong block, or a delivery driver gets routed to an approximate centroid instead of a front door. The coordinates are "close enough" until they aren't, and your application takes the blame. We continuously update our geocoding dataset as new address and POI data becomes available. This release is our largest expansion yet: 75 million new addresses, 3 million new points of interest, improved intent recognition, and a new way to query with structured address fields. ## Rooftop-Level Accuracy at Scale The bulk of this expansion comes from OpenAddresses, one of the largest open datasets of address-level coordinates. These aren't interpolated guesses along a road segment. They're rooftop-level points tied to individual parcels, which matters for any application that depends on precise placement: routing, last-mile logistics, property lookup. The gains aren't spread evenly. France and the US lead with roughly 25 million new addresses each, followed by Germany with 3 million and notable expansions across Brazil, Australia, and Mexico. If you've been hitting street-level fallbacks in these regions, you should see noticeably better results. ## Fresher Points of Interest POI data goes stale quickly. A restaurant opens, a shop closes, a business moves across the street, and suddenly your search results are sending users to the wrong place. We've added 3 million POIs from Foursquare OS Places, bringing our dataset more in line with what's actually on the ground. Better coverage for the kinds of searches your users actually run: finding a specific restaurant, locating the nearest pharmacy, or navigating to a business that opened last month. ## Smarter Search, Fewer Misses Beyond raw data, we've improved how our [/search APIs](https://stadiamaps.com/products/geocoding-search/geocoding/){rel=""external""} interpret what users actually mean. The changes focus on intent recognition: better handling of queries for larger geographic areas, complex or compound place names, and cases where the most obvious textual match isn't the right result. Your users should find more of what they're looking for on the first try. ## Structured Address Input, Now on v1 For developers working with structured address data, this release adds `house_number`, `street`, and `unit` as first-class fields on the geocoding API. Previously, structured queries supported country, region, and postal code, but the address itself arrived as a single text field that we had to parse before running a match. If your dataset is already structured that way, you can now pass it through directly. This is common for shipping, CRM, and property data. Queries with the new fields skip the parsing step entirely, which typically means better match quality and faster responses. The free-text `address` field isn't going anywhere. If you only have a single string, we'll still parse it for you. The new fields are available on v1 today. Adopt them at your own pace. ## No Tracking Required A common assumption in the industry is that better geocoding requires more user data: search history, device location, behavioral signals. We don't work that way. These improvements come from better source data and smarter algorithms, not from profiling your end users. Your users' queries are yours, not ours. As with everything we build, these updates are available through standard APIs and SDKs, including MapLibre and Leaflet. Technical precision, fair pricing, and privacy are baked in from the start. ## Get Started The expanded dataset, structured address fields, and search improvements are live now for all Stadia Maps customers. New here? [Create a free account](https://client.stadiamaps.com/signup/){rel=""external""} and start geocoding. # AI Tools for API Companies: 4 Design Principles for AI-Native API Consumption In our [previous article](https://stadiamaps.com/blog/ai-tools-for-api-companies-ai-needs-context/), we shared how our "obvious" approach to building tools for AI—auto-generating a MCP server from existing documentation and OpenAPI specs—failed spectacularly. After that failure, we had to learn how to design tools specifically for AI consumption. We observed a fundamental difference between human developers and AI models: AI models have no persistent memory across sessions. When a human first encounters your API, they might struggle with the options, but after a few uses, they internalize what works best. AI models don't. Every conversation is their first time using your API. For example, a breakthrough understanding about when to use country filters versus bounding boxes is lost the moment the chat ends. This fundamental limitation drives every design decision that follows. In the process of overhauling our MCP server, we developed four guiding principles to help build the best tools for AI as an API company. ## Tool Descriptions Are Critical We learned that tool descriptions do the heavy lifting. The description is your chance to tell the model not just what your tool does, but when and why a model might want to use it. A good description helps the model choose the right tool for the job and understand the context where it's most useful. Our [Static Maps API](https://stadiamaps.com/products/maps/static-maps/) demonstrates this well. Originally, we described it as: > Generate a map with a marker at a specific location. Returns a PNG image. This description was technically accurate but too narrow. Models would only use it when explicitly asked for "a map with a marker," missing opportunities where it could create useful visualizations. Now we describe it as: > Generate a PNG map image of an area, optionally including markers and a line (e.g. to draw a route or a boundary) The improved description helps models understand the broader capabilities and context where the tool is useful. Instead of only thinking "marker on map," they now consider it for routes, boundaries, and general area visualization. ## Context Window Management Matters We discovered that token consumption is a hidden constraint. Large tool descriptions and verbose responses quickly eat into the available, or perhaps more importantly, *usable* context window, leaving less room for user input and driving up costs. The cost of cognitive load taught us to be frugal with our tool descriptions and the number of parameters for each tool. Every word needed to help the model understand when to use the tool or how to interpret the results. The same applies to tool responses. Instead of packing responses with potentially useful but unnecessary elements, each element of the response should be focused on helping the model answer the question. We believe this merits further investigation. We want to understand how tuning descriptions for specific models could yield even better performance, especially different AI models interpret tool descriptions in different ways. ## Optimize Output Formats for AI Interpretation Our API responses, while great for programmatic consumption, needed rethinking for AI consumption. Instead of just returning raw JSON, we started designing responses that help models interpret and use the data effectively. Sometimes this meant adding human-readable summaries alongside or instead of structured data. Other times it meant restructuring the response to highlight the most relevant information. The goal was always to reduce the cognitive load on the model while preserving the essential information. Our [Timezone API](https://stadiamaps.com/products/geospatial-apis/) illustrates this perfectly. Originally, we returned the technical data that developers needed: ```json { "tz_id": "Europe/Zurich", "base_utc_offset": 3600, "dst_offset": 3600 } ``` This worked fine for developers who could calculate the current local time themselves. But AI models struggled with a surprising limitation: they don't inherently know what time it is right now. When someone asked "Is this restaurant in Zurich open now?", models couldn't reliably determine the current local time from just the timezone offset data. So we added the local timestamps to our response: ```json { "tz_id": "Europe/Zurich", "base_utc_offset": 3600, "dst_offset": 3600, "timestamp": 1749479378, "local_rfc_2822_timestamp": "Mon, 9 Jun 2025 16:29:38 +0200", "local_rfc_3389_timestamp": "2025-06-09T16:29:38+02:00" } ``` Now AI models can immediately understand both the current local time and work with the format they parse most naturally. This change also made the API more useful for human developers who previously had to calculate local time themselves. ## Split Complex Endpoints into Focused Tools Our biggest breakthrough came from abandoning the one-tool-per-endpoint approach. Instead of exposing our every endpoint as a tool with many parameters, we learned to split them into focused, use-case-specific tools, often removing complexity to ensure models can effectively use each tool. Take our [geocoding](https://stadiamaps.com/products/geocoding-search/geocoding/) tool as an example. Originally, we exposed all the filtering options available in our API—bounding box coordinates, circular search areas, layer filters, and country restrictions. We thought giving AI models more control would lead to better results. In practice, the models never used most of these options, even when they should have. When they did try to use them, they often got confused about which filter was most appropriate and picked sub-optimal choices. A request to "find coffee shops in downtown Seoul" might trigger attempts to calculate bounding box coordinates rather than simply using the country filter. We eventually eliminated everything except the country filter. We kept this one because it was the simplest—just a 3-character ISO code rather than coordinate lists for bounding boxes or radius calculations. It also happens that most models can figure out country codes quite easily from their pre-trained general knowledge, turning "find addresses in South Korea" into a simple `country: "KOR"` parameter. The key insight: AI models perform better with multiple simple tools than one complex tool. They can chain together focused tools to solve complex problems, but they struggle to navigate a tool with dozens of configuration options. As our tool usage grows, we expect to iteratively add new, focused tools based on our existing endpoints to better help models answer location questions. ## From Spectacular Failure to Working Tools These four principles transformed our MCP server: contextual tool descriptions, focused endpoint splitting, AI-optimized responses, and careful token management. As we discovered them, the spectacular failure we described in our [first article](https://stadiamaps.com/blog/ai-tools-for-api-companies-ai-needs-context/) became something that actually works. AI models can now successfully help users find routes, geocode addresses, and interact with our location services in natural, intuitive ways. But mastering the technical aspects of tool design was just the beginning. The real surprises came from what we learned about our own APIs in the process, and the unexpected capabilities that emerged when AI agents started orchestrating our tools in ways we'd never anticipated. These insights go far beyond tool design and touch on fundamental questions about how API companies should think about AI-native development, developer experience, and business strategy in an agent-driven world. In our next article, we'll explore how building our MCP server became a mirror that revealed opportunities to improve our underlying APIs, and how it unlocked user workflows we never had to build ourselves. The technical lessons covered here are essential, but they're just the foundation for understanding what AI-native API consumption really means. For now, if you're building your own tools for AI, start with these principles and prepare to be surprised by what you learn about your own APIs in the process. Want to see these principles in action? Check out our [MCP Server on GitHub](https://github.com/stadiamaps/stadiamaps-mcp-server-ts){rel=""external""} and join our [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""} to discuss your own experiences with other developers tackling these same challenges. # AI Tools for API Companies: AI Needs Context, or How Our Auto-Generation Failed Spectacularly The AI agent revolution is here, and with it, everyone's talking about agent tools. As a location API company, we've spent years perfecting location tools for human developers. So when the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/){rel=""external""} promised to make our APIs accessible to AI agents, we figured it would be straightforward. Just auto-generate a MCP server with a healthy selection of tools like we do with SDKs, right? Wrong. Our initial attempts failed spectacularly, and we learned some unintuitive lessons: the biggest of which is that the context in which AI consume APIs matters enormously. ## What Are AI tools? Fundamentally, tools are how language models interact with external systems. Normally, when a user asks an AI assistant to "find the best route from Seoul to Busan," the model can't give anything more than a vague summary. With the right tools, however, AI can use APIs to lookup addresses, provide real-time directions, and even map the resulting path. The Model Context Protocol standardizes how AI models discover and interact with these tools. MCP servers act as bridges between AI systems and external systems, defining a consistent interface for tool discovery, parameter specification, and response handling. They're gaining traction because they solve a critical infrastructure problem: how to reliably connect AI agents to the vast ecosystem of existing APIs. As engineers, this looked a lot like a pattern we already knew: SDKs for developers. ## The "Obvious" Solution Given we'd already spent years building solid SDKs generated from hand-crafted OpenAPI specifications, it seemed logical to start there. From this foundation, we auto-generated our first MCP server. From start to finish, the whole process took a couple hours. We had a working MCP server, complete with tools for geocoding, routing, and creating maps. It seemed perfect. Then we tried our prompt: > Find the best route from Seoul to Busan. ## What Happened Immediately, our quick win began showing its limits. The models were using our tools in subtly but fundamentally flawed ways, and that’s the worst kind of failure. Location APIs, even in the simplest form, are complex. Most endpoints offer dozens of inputs and parameters. For humans, we solve this by offering clear documentation and guides. Unfortunately, this complexity quickly confused models. In the maze of options, they couldn't figure out which parameters mattered. When finding a route should it optimize for time or distance? What about tolls? Should it choose car, bike, truck, some other mode of transportation? This was further compounded by models not even knowing which questions to ask to feed the tool the right parameters. Even when models did choose reasonable parameters, they struggled with complex responses. Our APIs return detailed JSON objects optimized for programmatic consumption, but AI models often missed crucial information or got overwhelmed by unnecessary details. Token consumption quickly became problematic. Our mega-tools with extensive parameter lists consumed large amounts of context space, leaving less room for user input and driving up model costs and, more importantly, efficiency. A single tool description could easily eat 500+ tokens before the model even chose which tool it should use. The pattern was clear across every endpoint we tested: APIs designed for human developers, no matter how well-crafted, don't automatically translate to effective AI tools. Our fundamental assumption—that well-built, well-documented APIs automatically make good AI tools—was completely wrong. ## What We Were Actually Building We had to take a step back and consider what we were actually trying to do. When we started, we assumed we were building another SDK, but we weren't. We were building something fundamentally different: contextual tools specifically structured for AIs. The key insight we missed initially is that AI models consume APIs through a completely different lens than human developers. Human developers read documentation, understand business logic, and make nuanced decisions about parameter selection. AI models need tools designed specifically for their consumption patterns: focused, well-described, and optimized for the constraints of language model reasoning. ## What's Next This failure taught us much of what we needed to know about building MCP servers that actually work. After our auto-generated approach failed, we had to retool our entire strategy. In our [next article](https://stadiamaps.com/blog/ai-tools-for-api-companies-ai-native-design-principles/), we'll share the design principles we discovered for creating AI-friendly tools, the unexpected ways building MCPs improved our underlying APIs, and the new capabilities this unlocked that we never had to build ourselves. For now, if you're looking at MCPs for your own API company, remember this: the obvious solution rarely works when you're building for AI consumption. The patterns that make APIs great for human developers need fundamental rethinking for AI agents. Want to stay ahead of the AI tooling curve? [Subscribe to our newsletter](https://mailchi.mp/stadiamaps/mcp-leads-landing){rel=""external""} for insights on building APIs that work seamlessly with AI agents, MCP server best practices, and the evolving landscape of AI-native development. If you're impatient and want to see our principles in action right now, check out our [MCP Server on GitHub](https://github.com/stadiamaps/stadiamaps-mcp-server-ts){rel=""external""}. And join our [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""} to discuss your own MCP experiences with other developers tackling these same challenges. # Announcing Cacheable Static Maps Our Static Maps API offers an easy way to add maps to your website or app. If your use case doesn't require interactive maps, you can push all the rendering complexity to our servers. We'll even let you customize the maps with annotations like markers and lines, all using a simple URL! ## Simpler Licensing for Printing and Caching Today, we're launching a cacheable static maps endpoint with special terms to enable new use cases. For digital use, this endpoint allows storing or caching map images in your infrastructure or an image CDN (as long as you maintain a paid subscription). For print applications, you'll no longer need to contact us for a custom license if your usage meets certain conditions. With these two changes, we're making it easier for you to build solutions without having to ask us for custom pricing or terms. ## Advanced Privacy Protection; Enhanced Customizing & Performance The new digital use terms allow you to create solutions using static maps so end-user traffic never goes to our servers. If you're looking for a way to enhance end-user privacy beyond our no-tracking policy, or have particularly strict compliance needs, the new endpoint enables you to pre-generate or cache images fully under your control. For users looking to utilize popular image CDNs or push-based deployment strategies used by some site generators, this new endpoint allows you to take advantage of these enhancements and remain compliant with our terms. Cacheable static maps are available using a new endpoint, which you can read about in our [documentation](https://docs.stadiamaps.com/static-maps/?utm_source=marketing_site&utm_medium=blog&utm_campaign=static_maps&utm_content=cacheable_static_announcement){rel=""external""}. The request parameters are the same as our existing static endpoint, so the migration only takes a few seconds. We can't offer caching on the Alidade Satellite style at this time, but all other features and capabilities are identical, including access to the [map styles from Stamen Design](https://docs.stadiamaps.com/themes/?utm_source=marketing_site&utm_medium=blog&utm_campaign=static_maps&utm_content=cacheable_static_announcement#stadia-stamen){rel=""external""}. ## Learn more - Learn how to use the new endpoint from our [static maps documentation](https://docs.stadiamaps.com/static-maps/?utm_source=marketing_site&utm_medium=blog&utm_campaign=static_maps&utm_content=cacheable_static_announcement){rel=""external""}. - See our [pricing](https://stadiamaps.com/pricing/) for cacheable static maps and all other endpoints. - Read our [terms for the new endpoint](https://stadiamaps.com/terms-of-service/#cacheable-terms). # Announcing Elevation Data Ever since we started offering our navigation API, we've received a slow, steady stream of requests for elevation data. While we really wanted to offer this, doing so, at the quality of service our customers deserve, requires a lot of disk space. Given our global user base and commitment to affordable prices, we needed to find a solution that allowed us to offer world-wide elevation coverage without costing too much. Thanks to our [cloud provider's new Object Storage](https://www.linode.com/products/object-storage/){rel=""external""} offering, we developed a performant solution that enables us to deliver global elevation data without raising prices. We finished beta testing a few weeks ago, and are excited to announce that Valhalla-powered elevation APIs are now live! ## Elevation data—at a point or along a path Elevation data is a perfect companion to route planning, especially for runners and cyclists. In addition to getting the elevation at a single point, you can also ask for the elevation along a path (such as a cycling route) and use this data to display a route profile for a planned route. ## Elevation-influenced Routing for Bicycles Additionally, bicycle routing can now specify a hill usage penalty. This gives most cyclists outside Switzerland the option to flatten out the ride a bit. For those of you in the Swiss alps, we can’t promise too much. ⛰\:flag-ch: ## Introducing `api.stadiamaps.com` We're also excited to announce a new hostname that you can use for accessing all of our APIs. `route.stadiamaps.com` served its purpose well when we only offered routing APIs, but as we grow, we feel it’s time to make the transition to a more general hostname for all of our geospatial APIs: api.stadiamaps.com. We will, of course, continue supporting existing services running on the old subdomain, but the forthcoming geospatial APIs will only be accessible via `api.stadiamaps.com`. ## Get Stated with Elevation Data Want to dive right into using elevation data? Learn more over in our [documentation](https://docs.stadiamaps.com/elevation%22%3Edocumentation){rel=""external""}! ## Talk to us! Is our routing service missing something? Wish you could do something more with Stadia Maps? We’re always happy to hear how we can improve! Let us know via [email](mailto\:support@stadiamaps.com) or the social links below. # Announcing Simplified Account-Based Billing At Stadia Maps, we're always trying to make maps more accessible. Since launching, we have required a subscription for each property in your Stadia Maps account. However, over time, we recognized this approach added unnecessary complexity and confusion (it is the top support question we receive). So starting today, we’re making your life easier by billing per account rather than per property. Properties are still a useful way that many of our customers track usage of individual applications, so they are not going away. In fact, you can still create as many of them as you like! The difference is that your account only needs a single subscription that covers the *combined* usage of all your properties. We’ve added an account-level overview to the client dashboard so that you can see the aggregate usage against your plan limit. If you previously had multiple subscriptions, we’ve got you covered! We have already canceled any extra subscriptions and emailed you with the good news. Of course, our [terms of service](https://stadiamaps.com/terms-of-service/) still apply, and you will need multiple accounts to use maps across multiple entities. See our [FAQ](https://stadiamaps.com/faqs/) to learn more about shared billing, and when you need multiple accounts. # Announcing Version 2 of our Official SDKs Today marks a new milestone in the lifecycle of the Stadia Maps official SDKs. We have just released version 2.0.0 of our API client libraries for the web, mobile and backend. With official clients in TypeScript, Swift, Kotlin, and Python, we've already helped thousands of developers get started in just a few lines of code. This release includes a number of improvements: - A factor for adjusting the cost of alleys when doing automobile routing - A resample distance parameter for elevation requests, which makes it even easier to get elevation profiles; just give us a simple set of points and we'll interpolate the rest! - Support for requesting one or more alternate routes (great for [navigation applications](https://stadiamaps.com/products/routing-navigation)) - Additional options to ignore restrictions (particularly useful during map matching when you just want to know which roads a vehicle traversed) If you're using one of our existing libraries already, it will generally keep on working as-is. However, in order to make a few of the improvements, we had to introduce backwards-incompatible changes, which is why it gets a major version bump. For migration instructions, refer to the release notes lined below: - [TypeScript](https://github.com/stadiamaps/stadiamaps-api-ts/releases/tag/v2.0.0){rel=""external""} - [Swift](https://github.com/stadiamaps/stadiamaps-api-swift/releases/tag/2.0.0){rel=""external""} - [Kotlin](https://github.com/stadiamaps/stadiamaps-api-kotlin/releases/tag/v2.0.0){rel=""external""} - [Python](https://github.com/stadiamaps/stadiamaps-api-py/releases/tag/v2.0.0){rel=""external""} # Autocomplete Search for SwiftUI and Jetpack Compose If you've ever tried adding location search to a mobile app, you already know how challenging it can be to get the UI right, juggle network data sources, and other headaches. Today we're making that easier with composable UI elements for [SwiftUI](https://docs.stadiamaps.com/sdks/swiftui-autocomplete-search/?utm_source=marketing_site&utm_campaign=composable_autocomplete_launch&content=intro){rel=""external""} and [Jetpack Compose](https://docs.stadiamaps.com/sdks/jetpack-compose-autocomplete-search/?utm_source=marketing_site&utm_campaign=composable_autocomplete_launch&content=intro){rel=""external""}. These packages build on top of our existing SDKs for Swift and Kotlin, and handle all the API communication for you. No boilerplate. With just a few lines of code, you'll have a UI that "just works." And once the user selects a result from the list, your code can decide what to do next. For example, you can autofill an address form or start turn-by-turn navigation. ## Keeping it customizable Composable UI frameworks like SwiftUI and Jetpack Compose enable many customizations that are difficult or impossible with other approaches— all while keeping things easy to use. For example, if you want to customize the look and feel of the list, just pass in your own `View` or `@Composable`, and we'll use that instead! And of course, you can use any SwiftUI or Jetpack Compose modifiers to change how the view is laid out in your app. We also provide many customizations for you automatically. The view appearance automatically syncs with your material theme or dark mode preferences, so it fits in with the rest of your app. And we even localize the UI based on device settings, so users will see results in their language wherever possible. ![Autocomplete Search Example](https://stadiamaps.com/images/content/autocomplete-search-localized.png) ## Putting Results in Context—Privately Location is critically important context if you want to provide relevant search results. For example, "London" might conjure up images of Big Ben for some, but maybe London, Ontario is a bit more relevant if you're in Toronto. That's why our APIs can optionally focus results around a location. Our new packages support this too and, just like our APIs, location information is optional. And if you're in the EU and concerned about GDPR compliance, the new packages support our [EU endpoints](https://docs.stadiamaps.com/eu-gdpr-endpoints/?utm_source=marketing_site&utm_campaign=composable_autocomplete_launch){rel=""external""} with a simple flag. ## Learn More & Next Steps - Check out our quickstart documentation for [SwiftUI](https://docs.stadiamaps.com/sdks/swiftui-autocomplete-search/?utm_source=marketing_site&utm_campaign=composable_autocomplete_launch&content=next_steps){rel=""external""} and [Jetpack Compose](https://docs.stadiamaps.com/sdks/jetpack-compose-autocomplete-search/?utm_source=marketing_site&utm_campaign=composable_autocomplete_launch&content=next_steps){rel=""external""}. - Find the source code on GitHub ([SwiftUI](https://github.com/stadiamaps/swiftui-autocomplete-search){rel=""external""} and [Jetpack Compose](https://github.com/stadiamaps/jetpack-compose-autocomplete-search){rel=""external""}; give it a star!). - Follow Stadia Maps on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [newsletter](https://eepurl.com/gs51fD){rel=""external""} to hear about exciting developments first. # Beyond the Car: Routing for the Other 90% of Transport > Standard "car-first" routing APIs often fail to account for the unique legal and physical constraints of specialized fleets. Stadia Maps bridges this gap by leveraging the Valhalla routing engine and OpenStreetMap data to provide granular, modal-specific routing for everything from 10-ton trucks and e-bikes to low-speed vehicles (LSVs). ## The Problem Standard consumer mapping apps are excellent at getting a passenger car from point A to point B, but the "car-first" default is a significant limitation for professional use cases. The moment a business needs to route a 10-ton truck, a delivery e-bike, or a neighborhood electric vehicle, most [Directions APIs](https://stadiamaps.com/blog/why-osm-routing-needs-real-time-traffic/) fall apart. Such platforms often lack the flexibility required for specialized fleets and fail to account for the unique legal and physical constraints these vehicles face. ## The Logic Gap Generic routing engines often treat a 10-ton semi-truck the same as an e-bike, leading to dangerous route suggestions or illegal maneuvers. Developers shouldn't have to build custom logic layers just to ensure a vehicle stays on a legal road. Stadia Maps solves this by processing [OpenStreetMap (OSM) data](https://wiki.openstreetmap.org/wiki/Routing_profiles){rel=""external""} into a specialized routing graph. Our engine extracts both implicit and explicit vehicle access rules, bridging the gap between raw map data and safe navigation. By providing tailored routing profiles for diverse vehicle archetypes, we ensure that every calculation respects the physical and legal constraints of each asset. We leverage the open-source [Valhalla routing engine](https://valhalla.github.io/valhalla/){rel=""external""}, which allows you to customize desirability factors when you make an API request. Specialized profiles for the 10-ton truck and the e-bike enable logistics platforms to automate fleet dispatch and [micromobility](https://www.mckinsey.com/featured-insights/mckinsey-explainers/what-is-micromobility){rel=""external""} startups to provide riders with reliable, safe navigation. ## The Stadia Maps Difference [Dynamic costing](https://docs.stadiamaps.com/routing/standard-routing/){rel=""external""} gives you control over dozens of parameters on the fly, ensuring fleets navigate complex environments efficiently. Key capabilities include: - **Vehicle Subtypes:** Distinguish between mountain bikes and road bikes, or golf carts and other Low-Speed Vehicles (LSVs). - **Physical Preferences:** Configure the engine to avoid hills for scooters, disallow U-turns for long trucks, or avoid toll roads entirely. - **Precision Waypoints:** Specify that a waypoint must be visited from a particular side of the road, a critical feature for curb-side delivery and waste management. - **Direct Map Edits:** Map errors shouldn't take months to fix. Make your own edits directly. Updates can be live in our [routing engine](https://docs.stadiamaps.com/routing/valhalla/){rel=""external""} within days. ## Specialized Mobility Solutions Flexibility enables business models that standard providers simply cannot support. A prime example is our work with municipalities such as [Peachtree City, GA](https://peachtree-city.org/216/Paths-Golf-Carts){rel=""external""}, and [The Villages, FL](https://www.districtgov.org/recreation/trails.aspx){rel=""external""}. These communities have extensive, legally regulated networks for golf carts and LSVs. Stadia Maps provided the only routing profile customizable enough to fit their local ordinances, such as prohibiting LSVs on roads with speed limits over 35 mph. We support almost a dozen routing profiles out of the box, including bus, motorcycle, and pedestrian, with [matrix routing limits](https://docs.stadiamaps.com/routing/time-distance-matrix/){rel=""external""} that are often orders of magnitude higher than those of our competitors. Whether you are optimizing a transit authority's bus training or dispatching a fleet of e-bikes, your routing engine should adapt to your vehicle, not the other way around. --- [Create a free account](https://client.stadiamaps.com/signup/){rel=""external""} to explore our specialized routing profiles, or [contact our team](mailto\:support@stadiamaps.com) to discuss a custom solution tailored to your unique vehicle constraints. # Custom markers and POST support for Static Maps Static Maps are the fastest ways to add maps to your website or app. Since each map is a single PNG or JPEG, they are a lot easier to set up than interactive maps. You can even add markers and lines to static maps—our servers handle the hard work. ## Custom marker images Today you can add markers to a static map by including the coordinates in your request. We’ll automatically select a suitable image based on the map style. You can also use a labeled marker with a classic solid design for differentiation. Today, we’re letting you go even further with branding and improved differentiation. Just send us the image URL in your request to customize the marker image! This feature is now available on all plans that have access to static maps (including free trials). We’re launching with support for up to 5 custom marker images per request, giving you plenty of flexibility. And the images can be up to 128px in each dimension, so your carefully designed icons will look great on retina and other HiDPI screens. ![Static Map](https://tiles.stadiamaps.com/static/alidade_smooth.png?center=59.438484,24.742595\&zoom=14\&l=oj_kpBkhmen@vFvDlStSdIzN%60BxCfMfShA%60B~@%7CAvCrDpG%60FfVfRb%5CzSrBdBhZx%5CpFdM~BpFn@zAxCrHrH%7CQjOh_@NtM%7CVv@d@aHdHEfD%5E%5CDhCh@nIjFlFvE~CfCzAzAdFjFt@t@~EdG%5DcEc@%7BFm@uF%5DoDgAwJhAm@vMqGoAs%7B@dAMfG_@dE_@Ezb@ExWzBBZ?L@%7CDnTtAqE~CyMp@sB%7C@n@XUx@uBjAiApBi@lBp@hAtAzAClSjJzAkMtAl@dA%7D@~CVbB%60@pDtAN%7DDxD%60AdFi@vBIxBIe@aMuAgPyFwy@%7BCa_@yFar@%5B%7BC_AsGuAkGqEgY_CmLqAuFuHi%5Bm@vBq@hC,333333,5\&m=59.436884,24.742595,,,C\&m=59.437485,24.743150,,,B\&m=59.434931,24.745442,,,D\&m=59.441293,24.747380,custom\:https%3A%2F%2Fdocs.stadiamaps.com%2Fimg%2Fleaf-green.png,,,,-32,-95\&markers=59.435561,24.747605,,red,E\&size=600x400@2x) ## Make complex requests with ease Before today, the Static Maps API was configurable via query string parameters. We occasionally heard from customers having issues though, because web browsers and servers place limits on URL length. This limited the level of detail and customization. That’s why we’re now accepting POST requests to the [cacheable static maps endpoint](https://stadiamaps.com/blog/announcing-cacheable-static-map-images/). POST parameters are sent via a JSON body, making it easier to specify complex requests. And when we add new features—like polygons — you won’t have to worry about URL length. As far as we know, we’re the first provider to offer this! Here’s an example request body: ```json { "center": "59.438484,24.742595", "size": "600x400@2x", "zoom": 14, "lines": [ { "shape": "oj_kpBkhmen@vFvDlStSdIzN`BxCfMfShA`B~@|AvCrDpG`FfVfRb\\zSrBdBhZx\\pFdM~BpFn@zAxCrHrH|QjOh_@NtM|Vv@d@aHdHEfD^\\DhCh@nIjFlFvE~CfCzAzAdFjFt@t@~EdG]cEc@{Fm@uF]oDgAwJhAm@vMqGoAs{@dAMfG_@dE_@Ezb@ExWzBBZ?L@|DnTtAqE~CyMp@sB|@n@XUx@uBjAiApBi@lBp@hAtAzAClSjJzAkMtAl@dA}@~CVbB`@pDtAN}DxD`AdFi@vBIxBIe@aMuAgPyFwy@{Ca_@yFar@[{C_AsGuAkGqEgY_CmLqAuFuHi[m@vBq@hC", "color": "333333", "width": 5 } ], "markers": [ { "lat": 59.436884, "lon": 24.742595 }, { "lat": 59.441293, "lon": 24.747380, "style": "custom:https://docs.stadiamaps.com/img/leaf-green.png", "anchor": [-32, -95] }, { "lat": 59.435561, "lon": 24.747605, "color": "red", "label": "E" } ] } ``` ## We’re not stopping here! Our roadmap still has more features on it (thanks to you!). Keep an eye out for integration with our routing API, polygon drawing, and more—all in a single API call. ## Accessing the new functionality We’ve updated our [documentation](https://docs.stadiamaps.com/static-maps/?utm_campaign=custom_markers_post&utm_medium=owned&utm_source=marketing_site){rel=""external""} with everything you need to get started, including HTML and cURL examples. And if you have any questions, you’re just an email away from real human support. Drop us a note at . # Enhanced Documentation and Introducing mkjsfiddle At Stadia Maps, we work hard to make your mapping experience easy and painless. A core part of our mission to make location human is making our docs as accessible as possible for you as a developer. The fewer the hurdles to development, the faster you can deliver solutions to your customers. Experimenting with code and seeing results instantly is an effective way to learn a new library or framework. If you’re a frontend developer, there’s a good chance you have already used [JSFiddle](https://jsfiddle.net/){rel=""external""} for this a few times. We did some digging and found that they have an [API](https://docs.jsfiddle.net/api/display-a-fiddle-from-post){rel=""external""}, which lets us generate fiddles from the code segments in our docs, freeing you to focus on what matters. No need to copy the code to your computer, start up a web server, or register an account—just start fiddling! We've updated the relevant code snippets in our docs, such as vector and raster map examples, with a nifty button to edit the sample right away in JSFiddle. Check it out in action [over here](https://docs.stadiamaps.com/vector/){rel=""external""}! ## Announcing mkjsfiddle While we were building the integration, we looked around for a library that would do it automatically. We use [MkDocs](https://www.mkdocs.org/){rel=""external""} for generating our documentation pages from Markdown, and we thought surely someone would have a plugin for this already. Unfortunately we couldn’t find any, so we wrote one! We think other MkDocs-based sites can benefit from JSFiddle integration as well, so we’ve [open-sourced our plugin](https://github.com/stadiamaps/mkjsfiddle){rel=""external""}. We hope other projects can use this to make their docs a little more human. ## Talk to us! Are our docs helping you easily find the information you need? Wish you could do something more with Stadia Maps? We’re always happy to hear how we can improve! Let us know via [email](mailto\:support@stadiamaps.com) or the social links below. # European Union-only Endpoints Are Now Available At Stadia Maps, privacy is our utmost priority. That's why we develop all of our services with privacy as the foundation. While we are confident that our privacy practices and procedures satisfy General Data Protection Regulation (GDPR) requirements by default, we now give you an option to route all requests to a server inside the European Union. This helps customers who have wanted to guarantee their user requests and personally identifiable information (PII) remain within the European Union. To accomplish this, we now offer [EU-only endpoints](https://docs.stadiamaps.com/eu-gdpr-endpoints/){rel=""external""}, enabling users a way to exclusively connect to our EU-based servers. We are happy to continue to make our commitment to privacy and GDPR compliance even more accessible. The EU-only endpoints are accessible on all [plans](https://stadiamaps.com/pricing/){rel=""external""}. # Ferrostar: Building a Cross-Platform Navigation SDK in Rust (Part 1) This is the first in a series of technical blog posts covering the joys and challenges of building a cross-platform shared library, with a focus on use in mobile applications. As a motivating example to frame things, we'll follow the journey of building Ferrostar, a free and open-source navigation SDK. We want to offer a modern SDK that is cross-platform, vendor-neutral, and easily extensible both by direct contributors and developers using it in their apps. ## Why? Before we get into the technical weeds too much, it's worth taking a moment to ask *why*. At Stadia Maps, we have offered [highly customizable routing](https://stadiamaps.com/products/routing-navigation/) since 2017, and support use cases including safe pedestrian routing through lit areas, golf cart routing that prefers multi-use paths, and more! But developers are on their own when it comes to offering a turn-by-turn navigation UI. Several open-source apps already offer navigation, but the solution is not generalized. Among open-source navigation SDKs, MapLibre Navigation Android being the most mature at the time of this writing. But as the name suggests, it is Android-specific. And since the internals originally came from old open-source Mapbox code, it takes considerable effort to use with other vendors, and extensibility was never a core design consideration. Starting a new navigation SDK is certainly an ambitious project, but at the moment there is no navigation SDK that is high-quality, cross-platform, and open-source. We're here to change that, and enable developers to bring these routing innovations to their users. This post series is about the nuts and bolts of how we plan to pull it off. We'll start with an overview of ways to share common logic across platforms, explain the architecture we settled on, and finish with a deep dive into the first technical topic: binding generation with [UniFFI](https://mozilla.github.io/uniffi-rs/){rel=""external""}. ## How to Share Common Logic? We want to target multiple platforms: iOS and Android for starters. Certain code is the same regardless of where you're running it. Algorithms like detecting if the user has strayed off the route and calculating the distance to the next turn should be written once and shared across platforms. And at an even higher level, the broad "business logic" of a turn-by-turn navigation experience should be common shared code. Broadly speaking, there are two common approaches for sharing code across platforms in mobile apps today. First, there are cross-platform app development frameworks like Flutter, React Native, or Kotlin Multiplatform. They promise the ability to write your business logic and UI once and run it anywhere. The second approach is to put your business logic in a shared library. You write your code in a reasonably portable language (usually C++) and link this with your (platform-specific) applications. In general, the cross-platform frameworks are optimized for building *applications*, not *libraries*. We want to ensure that we can support additional platforms with relative ease. You can't just pick up React Native, for example, and run it on a bicycle computer. This is situation is improving though. For example, Flutter now runs on certain embedded devices, and Kotlin Multiplatform has a quickly improving support for library targets. However, these are still very early stage developments, and they involve a certain amount of ecosystem lock-in. Given our requirements, we opted for the shared library approach. Historically, C++ has been a popular choice for the task. It is portable across a wide range of platforms, can be made to interoperate with almost any other language, and usually produces small, well-optimized binaries. We preferred to use something else for a few reasons, the most important being that it is difficult to write safe and correct C++ code, especially as a new contributor. At Stadia Maps, we have been shipping Rust in production since 2018. Our investment has rewarded us with consistently good performance (Rust is keen on zero-cost abstractions), memory safety, and excellent maintainability. And Rust code tends to have fewer bugs as well! Rust also has excellent interoperability with other languages via a straightforward FFI using the platform's C ABI, in stark contrast to C++ which can be rather complex to interface with. Rust also has a large and growing list of supported platforms, including iOS and Android on several architectures. We aren't alone in our selection of Rust either. We've seen a lot of exciting development in Rust mobile frameworks like [Crux](https://redbadger.github.io/crux/){rel=""external""}, [Dioxus](https://dioxuslabs.com/){rel=""external""}, and [Rinf](https://github.com/cunarist/rinf){rel=""external""} over the past year. But it's not just new experimental projects that are adopting Rust. We know that both [Mozilla](https://wiki.mozilla.org/Oxidation){rel=""external""} and [Lyft](https://www.youtube.com/watch?v=e2ID05dpJzo){rel=""external""} are using Rust shared libraries in their mobile apps. Rust is already being used in production mobile apps today. ## Architecture Overview Zooming out, let's look at the broader architecture we adopted. The core is the place where we want all shared logic to live. In the context of our navigation SDK, this includes parsing API responses, figuring out when to advance navigation to the next step, calculating the distance to the next turn, and so on. Shared logic in a "functional core" isn't new, but we can go one step further and define our data models too! This lets us keep the navigation logic vendor- and platform-agnostic. For example, we define a common location update type with fields like coordinate, timestamp, and heading. This way the core logic doesn't need to care about the differences between `CLLocation` and `android.location.Location`. We're building a Rust library that's callable via the C ABI. But if we want any mobile devs to even try our framework, we'll need to expose a nicer Swift/Kotlin interface. These are called bindings, and they provide a thin layer that hides the messy details of going back and forth between Rust and the "native" mobile code. Finally, we have the native mobile library. This is the only thing that most app developers will see, and it handles communications with the "outside world" (ex: internet and GPS), and provides a higher level API that can be a bit more "opinionated." We won't say much more about this layer in the rest of our discussions, as many volumes have been written on good API and library design. **Spoiler to avert anxiety and frantic typing**: the rest of this blog goes deep into "how the sausage is made." To save you the tedious work of reproducing the structure for your next library, we've put together a [public template repo](https://github.com/ianthetechie/uniffi-starter){rel=""external""} on GitHub which is ready to go with no typing or other fiddling required. With that, let's dive in! ![Ferrostar Architecture Diagram](https://stadiamaps.com/images/content/ferrostar-arch.png) ## Bindings: Bridging Rust and Platform Code If you're familiar with the concept of foreign function interfaces (FFIs), you may remember `extern` declarations, calling convention specifications, and having to write a lot of boilerplate. But you know what is really good at generating boilerplate? Computers! Enter: binding generators. Mozilla has developed a fantastic tool for binding generation: [UniFFI](https://mozilla.github.io/uniffi-rs/){rel=""external""}. In their case, the motivation was to build pieces of Firefox which could be shared across platforms. UniFFI is designed to generate safe bindings that feel idiomatic to users of the target language. The [design principles](https://mozilla.github.io/uniffi-rs/internals/design_principles.html){rel=""external""} of UniFFI aligned well with our requirements for Ferrostar, and we think they tend to be a good fit for most similar mobile use cases. ### Cargo workspace setup Let's dive in with discussing the cargo workspace setup for Ferrostar. This should be a helpful guide for anyone wanting to create their own cross-platform library. We chose to structure the Rust portion of our library as a workspace with two member projects: `uniffi-bindgen` and `ferrostar`. At the time of this writing, the ability to run the binary from the `uniffi` crate is only available in nightly, so we opted for a second `uniffi-bindgen` crate in our workspace for the CLI binary. Here's what it looks like on disk: ```text ├── Cargo.lock ├── Cargo.toml ├── ferrostar │ ├── Cargo.toml │ └── src │ └── lib.rs └── uniffi-bindgen ├── Cargo.toml └── src └── main.rs ``` Scaffolding in place, we need to add UniFFI to our workspace's `Cargo.toml`. This way we can keep the binding generator and library versions in sync. At the time this article was originally published, proc macro features were still under active development. Since then, they have stabilized somewhat, and it might make sense to start using the crates.io releases. If you want the newest features and fixes though, it's best to use git dependencies. Tracking the latest commits can cause pain, but it is pretty rewarding if you want access to the latest improvements, which do come quite fast. ```toml [workspace] members = [ "uniffi-bindgen", "ferrostar", ] resolver = "2" [workspace.dependencies] uniffi = "0.26.1" ``` Then, we can add it to the `uniffi-bindgen` and `ferrostar` crates respectively. In the `uniffi-bindgen` crate, we need the `cli` feature. ```toml [dependencies] uniffi = { workspace = true, features = ["cli"] } ``` The `main` function in `uniffi-bindgen/src/main.rs` is a single line. Here's the entire file: ```rust fn main() { uniffi::uniffi_bindgen_main() } ``` In the `ferrostar` crate, we also need `uniffi` as a normal dependency *and* build dependency. We also need to configure the library target with a few different [`crate_type`s](https://doc.rust-lang.org/reference/linkage.html){rel=""external""}. - `cdylib` - A dynamic system library. Used on most platforms. - `staticlib` - A system library with *all* upstream dependencies included. Required to target iOS. - `lib` - A Rust library. This isn't mentioned in the UniFFI documentation as of this writing, but if you want to add integration tests (runnable via `cargo test`) and you don't include a Rust library target, you'll get strange errors. ```toml [dependencies] uniffi.workspace = true [build-dependencies] uniffi = { workspace = true, features = ["build"] } [lib] crate-type = ["cdylib", "staticlib", "lib"] ``` ### Defining what to export Internally, UniFFI uses an IDL (Interface Definition Language) to describe the public interface of your crate to foreign code (ex: Swift and Kotlin). This is similar to the process of writing a header file in C in that it is a set of definitions, but the definition file is used to generate the foreign language bindings. This used to require writing a bunch of boilerplate by hand. Fortunately, UniFFI (starting from v0.25.0) automates this using procedural macros. For our use case, we were able to replace *all* handwritten UDL with macros, and expect this will be the best path for most library authors going forward. #### Functions Let's get started by exporting a function from Rust which generates a parser for routing data coming from our APIs. A single macro, `uniffi:export` is all we need to export a top-level function. ```rust #[uniffi::export] fn create_osrm_response_parser(polyline_precision: u32) -> Arc { Arc::new(OsrmResponseParser::new(polyline_precision)) } ``` UniFFI macros generate the definitions for us automatically based on the function's type signature. Many built-in types like numbers, `String`, and `bool` "just work" as you expect. Collections like `Vec`, `Option` and `HashMap` are also implemented for all types that UniFFI knows how to represent over the FFI. They even have special cases for types like `Vec` which idiomatically map to a language-specific byte sequence type (ex: `Data` in Swift)! If anything you export references a type that UniFFI doesn't know how to convert, you will get a compilation error. So, how do we tell UniFFI about new types? #### Data models Let's look at two data models: user locations and route requests. We'll export these using derive macros. If you've used the `serde` crate, this should feel familiar. User location is just a struct with some properties like coordinates and course over ground. The `uniffi::Record` macro exposes our Rust types idiomatically. They will show up as `struct`s in Swift, and `data class`es in Kotlin. ```rust #[derive(uniffi::Record)] pub struct UserLocation { pub coordinates: GeographicCoordinates, pub horizontal_accuracy: f64, pub course_over_ground: Option, pub timestamp: SystemTime, } ``` Route requests are a little different. They don't really map to a record type. Since we want to build an extensible framework, we need to account for multiple ways of getting a route. For example, making an HTTP request, or computing a route on-device. This maps well to an enumeration. The `uniffi::Enum` derive macro exports these like you would expect. ```rust #[derive(uniffi::Enum)] pub enum RouteRequest { HttpPost { url: String, headers: HashMap, body: Vec, }, // ... } ``` #### Objects You can also export more complex objects with local state, methods, and constructors! One example of this in Ferrostar is our route adapter. It stores a request generator and response parser and exposes a generic interface so the caller doesn't need to know about the details. ```rust #[derive(uniffi::Object)] pub struct RouteAdapter { request_generator: Arc, response_parser: Arc, } #[uniffi::export] impl RouteAdapter { #[uniffi::constructor] pub fn new( request_generator: Arc, response_parser: Arc, ) -> Self { Self { request_generator, response_parser, } } #[uniffi::constructor] pub fn new_valhalla_http(endpoint_url: String, profile: String) -> Arc { let request_generator = create_valhalla_request_generator(endpoint_url, profile); let response_parser = create_osrm_response_parser(6); Self::new(request_generator, response_parser) } pub fn generate_request( &self, user_location: UserLocation, waypoints: Vec, ) -> Result { self.request_generator .generate_request(user_location, waypoints) } pub fn parse_response( &self, response: Vec, ) -> Result, RoutingResponseParseError> { self.response_parser.parse_response(response) } } ``` This example is a bit more complicated than the others we've looked at so far. First, we use the `uniffi::Object` derive macro on the struct. In contrast to `uniffi::Record`, this signals that the type will be passed by reference and may have methods. This will be exposed in Swift or Kotlin as a class. You must annotate your constructors with the `uniffi::constructor` macro. At the time of this writing, constructors must return an `Arc`. The `new` constructor is special, and is exposed most naturally, but other named constructors are also supported if you mark them as such. They are not currently as idiomatic as the default constructor, but I expect things like exposing a `convenience init` to Swift will be possible in the future. Finally, types exported with `uniffi::Object` tell the binding generator to emit a `protocol` (Swift) or `interface` (Kotlin) definition. **Pro tip:** This makes it easier for you to write mock implementations for unit testing! Our rule of thumb is to *pass* the protocol/interface to your native methods, and define your instance variables with protocol/interface types. When the time comes to construct one, your business logic will dictate which *concrete* implementation to construct. This makes your code significantly more extensible, and allows you to either use implementations from the Rust core or define your own in Swift/Kotlin. #### Errors Result types in Rust signal errors, and UniFFI can expose these idiomatically in the generated bindings. We use this pattern in the above example to signal response parsing errors. ```rust #[derive(Debug, thiserror::Error, uniffi::Error)] pub enum RoutingResponseParseError { #[error("Failed to parse route response: {error}.")] ParseError { error: String }, // ... #[error("An unknown error parsing a response was raised in foreign code.")] UnknownError, } ``` The `uniffi::Error` derive macro will work with any type conforming to `std::Error`. We make extensive use of `thiserror` for simplicity. In Swift and Kotlin code, this definition will be bridged into an enum conforming to `Error` and a sealed subclass of `Exception` respectively. Besides exposing the error types themselves, UniFFI also makes the error handling idiomatic. Let's return to the response parsing function signature. ```rust pub fn parse_response( &self, response: Vec, ) -> Result, RoutingResponseParseError> ``` Semantically speaking, this function will either return an ordered list of routes, or it will generate an error of type `RoutingResponseParseError`. As such, this is how the generated Swift bindings will look: ```swift public func parseResponse(response: Data) throws -> [Route] ``` Swift does not explicitly list error types, but uses the `throws` keyword. If you inspect the generated code, you can see that UniFFI does indeed handle error variants, mapping them to your error types. #### Traits Carrying on the motivating use case of vendor-agnostic routing API integration, we define traits in our crate for response parsing and similar things that we want to ensure remain generic. ```rust #[uniffi::export(with_foreign)] pub trait RouteResponseParser: Send + Sync { /// Parses a raw response from the routing backend into a route. fn parse_response(&self, response: Vec) -> Result, RoutingResponseParseError>; } ``` You can export traits with the `uniffi::export` macro, and will they show up as protocols/interfaces in your foreign code. Even better, if you use `with_foreign`, you can supply foreign code to Rust! It requires a bit of a dance Rust-side (you must use types of the form `Arc` at the time of this writing), but that's a small price to pay for such flexibility. Here's what it looks like in Swift. First, the Rust `trait` is translated into a Swift `protocol` automatically by the UniFFI binding generator. The method even has `throws`, just like you'd write in a pure Swift project! ```swift public protocol RouteResponseParser: AnyObject { /** * Parses a raw response from the routing backend into a route. * * We use a sequence of octets as a common interchange format. * as this works for all currently conceivable formats (JSON, PBF, etc.). */ func parseResponse(response: Data) throws -> [Route] } ``` Now we can implement it just like any other protocol. Here's an example of an implementation that we use in our testing. It's a mock that is initialized with a fixed set of routes for "end-to-end" tests without hitting a network service. In the real world, you might use `Codable` to convert the raw data into a Swift model and then map it to Ferrostar `Route`s. ```swift class MockRouteResponseParser: RouteResponseParser { private let routes: [Route] init(routes: [Route]) { self.routes = routes } func parseResponse(response _: Data) throws -> [Route] { routes } } ``` By making things like `RouteRequestGenerator` and `RouteResponseParser` traits, we make it possible for anyone to do the following: 1. Connect to a custom routing server (for example, one they are self-hosting). 2. Parse routes in a different format. 3. Generate routes on-device (in another library, Swift, Kotlin, etc.). We're really excited about how this will enable more innovation by developers, since Ferrostar will be easily adaptable to custom routing backends, both for research and commercial use. ## What works well? The APIs UniFFI generates truly feel idiomatic! It's hard to overstate how nice this is. It also goes out of its way to generate protocols/interfaces, which make it easy to mock parts for unit testing in native code, and even has pleasant surprises like `Vec` mapping to idiomatic byte sequence types. UniFFI encourages good hygiene all the way from Rust to your application code via type safety. Any type that appears in your signature must be exported, so you get checks from end to end. And Rust functions that return a `Result` type are translated into idiomatic errors and exceptions. You can even bridge custom types! We don't have space to go deep into that here, but here's some documentation on [how you can do it](https://mozilla.github.io/uniffi-rs/latest/types/custom_types.html){rel=""external""} without using primitives as a lowest common denominator. Finally, UniFFI makes it easy to use native code implementations of a protocol/interface with your Rust core! This lets us do things like dependency injection in a type-safe manner across an FFI boundary. ## What are the rough edges? When I gave a talk about this three months ago at the Seoul Rust meetup, and I had an entire slide full of challenges. Almost all of them were related to UDL, and almost are non-issues when you replace UDL generation with proc macros! A few remain though. First, **you'll need to change your habits around struct mutation**. Since we are introducing foreign code, UniFFI must assume that objects may be mutated from other threads. So, you can't have mutable references to `self` in UniFFI interfaces and must rely on interior mutability patterns instead. Importantly, your storage needs to be both `Send` and `Sync`, which means you'll need to turn to things like atomics and mutexes. UniFFI is also evolving quite rapidly. While some high-profile crates are fairly stable pre-1.0, you can definitely expect some turbulence with UniFFI. The changelogs are normally quite good, but if you're tracking `main` you can expect breaking changes. Fortunately, the team are *super* responsive on GitHub. They're working on it every day, and are extremely responsive as maintainers (we submitted a PR to improve some docs around proc macros, and it was merged after a round of discussions in less than 24 hours). The process of generating bindings for Swift and Kotlin, integrating this into your build tooling, and packaging everything into a usable SPM / Maven package is also quite complex. In fact, we would even suggest that the best practices around this are still being explored. This is a complex topic, and this post is already quite long, so we'll save it for the next article. ## Wrap-up In summary, while it is still a developing field, we couldn't be more excited about the future of Rust on mobile. As we've shown in this post, a shared core is not just possible; it's actually pretty straightforward and the developer experience is great thanks to UniFFI. We've put what we've learned into a [template repo](https://github.com/ianthetechie/uniffi-starter){rel=""external""} so you can try it too, without spending days figuring out boilerplate. Stay tuned for the next post, where we'll dive deeper into build processes and packaging. You can follow us on social media, join our Slack or Discord communities, or subscribe to our mailing list (no spam) to get the news first. Finally, if you're excited to bring the latest innovations in routing to more users, check out Ferrostar [on GitHub](https://github.com/stadiamaps/ferrostar){rel=""external""}. We have an issue tracker and have even marked some good first issues. (We'd especially love to have someone who is excited about Jetpack Compose.) Let's build the future of mobile navigation together! # Ferrostar: Building a Cross-Platform Navigation SDK in Rust (Part 2 - iOS Packaging) It's been a while since our [first deep dive](https://stadiamaps.com/blog/ferrostar-building-a-cross-platform-navigation-sdk-in-rust-part-1) into the tech behind [Ferrostar](https://docs.stadiamaps.com/sdks/ferrostar/?utm_source=marketing_site&utm_campaign=ferrostar_tech_blog_2&utm_medium=blog){rel=""external""}, our new turn-by-turn navigation SDK. As a recap, our [last post](https://stadiamaps.com/blog/ferrostar-building-a-cross-platform-navigation-sdk-in-rust-part-1) covered why we're writing the core in Rust, how we approached both code and data model sharing, and looked at the architecture from a high level. Writing some code for private use is one thing, but publishing it for others to use can be maddeningly difficult. When the time came for us to publish Swift Packages, we found something closer to the latter. In this post, we'll cover the practical details of how we cross-compiled the Rust library for iOS, packaged it in an XCFramework, and published it as a Swift Package. This is the missing manual we wish we had. ![A screenshot of Ferrostar navigating on an iPhone](https://stadiamaps.com/images/content/ferrostar-landscape-screenshot.png) ## Swift Packaging Let's start off by looking at the Swift Package structure. We'll need to add *two* targets to our `Package.swift`: a binary target for the static library, and a Swift target for the generated bindings. Binary targets in Swift Package Manager can be tricky, and this complexity makes our `Package.swift` file a bit unwieldy from the start. ```swift let binaryTarget: Target let useLocalFramework = false // NB: Set this to true when developing locally! if useLocalFramework { binaryTarget = .binaryTarget( name: "FerrostarCoreRS", // IMPORTANT: Swift packages importing this locally will not be able to // import Ferrostar core unless you specify this as a relative path! path: "./common/target/ios/libferrostar-rs.xcframework" ) } else { // Git stuff which we'll come back to at the end. let releaseTag = "0.23.0" let releaseChecksum = "fa308b519db5424d73d00d60ca03fc18c1dcf2f88704aadce29259d12f2de2b2" binaryTarget = .binaryTarget( name: "FerrostarCoreRS", url: "https://github.com/stadiamaps/ferrostar/releases/download/\(releaseTag)/libferrostar-rs.xcframework.zip", checksum: releaseChecksum ) } ``` Unfortunately, we haven't found a way to use the same `Package.swift` unmodified for both local development within the "project" and for publishing. (To be fair, this is an extremely rare feature, but it's worth noting that Cargo workspaces let you do this seamlessly with Rust crates.) So, we need to add some switching logic to our package definition. The above is the solution we came up with. We always ensure that `useLocalFramework = false` for the version checked in to git. Published versions will need to point to the released artifact, or else we'd require every developer to check out and build the whole project locally. For local development and CI builds, where you may need unreleased changes in the Rust core, you have to override the value to `true`. If anyone knows a cleaner solution to this, let us know! Another complicating detail is that you *need* a checksum for remote binary downloads. This is a safety measure built into the Swift Package Manager to prevent supply chain attacks. Since the checksum can't be known until build time, we have CI rewrite this line in `Package.swift` when publishing a release. (We'll cover this dance later.) One target down... the other is fortunately a bit simpler. We've called this `FerrostarCoreFFI` in our project, to make the distinction clear between the FFI bindings and the Rust binary. ```swift .target( name: "FerrostarCoreFFI", dependencies: [.target(name: "FerrostarCoreRS")], path: "apple/Sources/UniFFI" ) ``` This is pure Swift and doesn't have any surprises. It just depends on the binary target, and includes a source directory which will contain the generated bindings. You'll need to add both the source and binary target to your list of `targets`. You can now reference them by name from any of your other targets, and/or publish them via products. ## Cross compilation Now that we've looked at the package structure, let's see what actually goes into the two targets. We'll tackle cross compilation first. We're going to compile the Rust code for all the relevant iOS target architectures, just like Xcode does for our Swift projects. Cross compilation is quite tricky (maybe even traumatic) in some languages, but Cargo is full of pleasant surprises. ```shell cargo build --lib --release --target some-target-triple ``` That's it! Just specify the [target triple](https://doc.rust-lang.org/nightly/rustc/platform-support.html){rel=""external""}! For iOS, we actually need to compile for *three* targets: | Target triple | Description | | ----------------------- | ------------------------------ | | `x86_64-apple-ios` | Simulator for Intel-based Macs | | `aarch64-apple-ios-sim` | Simulator for ARM-based Macs | | `aarch64-apple-ios` | iOS devices | If you try running this on your machine right now, you may get an error since you need to have the target toolchain installed. Fortunately, this is easy. If you're using `rustup`, you can add any target with the command `rustup target add your-target-triple`. For iOS, there are just three targets, but we'll have a LOT more by the time we're done with this series. Remembering all of these is a lot of work, but there's a relatively under-appreciated file that can help us out: [`rust-toolchain.toml`](https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file){rel=""external""}. If you're using `rustup` to install `cargo`, it will automatically install the relevant toolchains for you! We can check this into git and call it a day. Here's [the full `rust-toolchain.toml` for Ferrostar](https://github.com/stadiamaps/ferrostar/blob/main/common/rust-toolchain.toml){rel=""external""}. While this file is specifically designed for use with `rustup`, other build systems often have a way of consuming it too. For example, Nix users could leverage [`fenix.fromToolchainFile`](https://github.com/nix-community/fenix){rel=""external""} to get the same effect. ## Generating the FFI Bindings Now that we have the static library built in its first form, we need an easy way for Swift to interface with it. It's [UniFFI](https://github.com/mozilla/uniffi-rs){rel=""external""}'s time to shine! Since our [first post](https://stadiamaps.com/blog/ferrostar-building-a-cross-platform-navigation-sdk-in-rust-part-1), UniFFI has evolved a `uniffi-bindgen-swift` crate concept with a slightly different CLI. Not a lot has changed, but it's worth a quick note in case you're on an older version. If you're starting fresh, this [starter template](https://github.com/ianthetechie/uniffi-starter){rel=""external""} has everything ready to go with the new setup. Here's how we generate the bindings: 1. Run `uniffi-bindgen-swift` via `cargo run -p`. 2. Copy the *generated Swift file* to the appropriate source directory (the `FerrostarCoreFFI` target's source path in our example). 3. Copy the *clang module map* into a framework staging directory. Here's the relevant portion of our build script, where `$1` is the name of the library (`ferrostar` in our case). ```zsh cargo run -p uniffi-bindgen-swift -- target/aarch64-apple-ios/release/lib$1.a target/uniffi-xcframework-staging --swift-sources --headers --modulemap --module-name $1FFI --modulemap-filename module.modulemap mv target/uniffi-xcframework-staging/*.swift ../apple/Sources/UniFFI/ mv target/uniffi-xcframework-staging/module.modulemap target/uniffi-xcframework-staging/module.modulemap ``` `uniffi-bindgen-swift` looks at the static library and generates everything we need to smoothly interact with it from Swift. This includes enums, protocols, library loading code, etc.; this is where it does the magic that makes the Rust library feel like a native Swift package. We just need to copy everything into the location we said in our `Package.swift`. NOTE: It is possible to integrate these steps into Xcode. However, given the relative difficulty of doing this and the overall flakiness of the Xcode build process, we opted for a simple, reliable shell script. This does mean you need to manually rebuild when changing Rust files, but that's a small step. ## Building a "fat" library (universal binary) As a last step before creating the XCFramework, we need to do something a bit funny and fuse two of our three binary targets together. The way that XCFramework is designed, it expects a single binary for each *platform*, not each *CPU architecture*. And we have two binaries for the iOS Simulator platform: one for the newer Apple Silicon and one for Intel. To get down to one binary per *platform* (simulator and device), we'll use an old tool, `lipo` to generate a "fat" binary with both architectures in a single file. ```zsh lipo -create target/x86_64-apple-ios/release/lib$1.a target/aarch64-apple-ios-sim/release/lib$1.a -output target/ios-simulator-fat/release/lib$1.a ``` ## Generating the XCFramework Now we finally put all of this together in an XCFramework. Some teams actually do this by hand, since it's a relatively simple structure, but we'll stick to Apple's official tooling. ```zsh xcodebuild -create-xcframework \ -library target/aarch64-apple-ios/release/lib$1.a -headers target/uniffi-xcframework-staging \ -library target/ios-simulator-fat/release/lib$1.a -headers target/uniffi-xcframework-staging \ -output target/ios/lib$1-rs.xcframework ``` This command combines the two static libraries, header, and module map into a single directory. And if all went well, we now have a working Swift package that you can test locally! ## Distributing the XCFramework Now it's time to revisit the git and checksum dance that we glossed over at the start. Here's our distribution checklist: 1. Zip up the folder. 2. Compute a checksum for the archive. 3. Update `Package.swift` with your release tag and checksum. We script this in our CI actions like so: ```zsh ditto -c -k --sequesterRsrc --keepParent target/ios/lib$1-rs.xcframework target/ios/lib$1-rs.xcframework.zip checksum=$(swift package compute-checksum target/ios/lib$1-rs.xcframework.zip) version=$(cargo metadata --format-version 1 | jq -r --arg pkg_name "$1" '.packages[] | select(.name==$pkg_name) .version') sed -i "" -E "s/(let releaseTag = \")[^\"]+(\")/\1$version\2/g" ../Package.swift sed -i "" -E "s/(let releaseChecksum = \")[^\"]+(\")/\1$checksum\2/g" ../Package.swift ``` `ditto` is an archiving utility found on all macOS systems. We use this to create the ZIP archive. Then, we compute the checksum using `swift package compute-checksum`. This utility is included in the Xcode Command-line Tools. For versioning, our repository prefers to keep all platforms in sync, and derives all versions from the Rust project using a bit of CLI magic. To update `Package.swift`, we use trusty old `sed` to rewrite the relevant lines in-place. For your package to be usable by others, you'll need to host your XCFramework for download somewhere and update `Package.swift` with an archive checksum and git tag. We use GitHub's release artifact hosting since it's easy and free, but you can also self-host the archive. ## Wrap-up Packaging a binary framework for iOS isn't easy, and the best practices have evolved in the last few years. Which is probably why no comprehensive (modern) guide exists for our use case! We hope this helps anyone else shipping binary frameworks on iOS. We've been using this process for about a year and a half for Ferrostar, and have automated all the steps with shell scripts and CI workflows. If you're curious to try this in your own project, check out the [UniFFI starter](https://github.com/ianthetechie/uniffi-starter){rel=""external""}, which includes ready-to-go build scripts and all the rest of the project boilerplate. And for a "real-world" CI pipeline on GitHub Actions, check out the [iOS Release action for Ferrostar](https://github.com/stadiamaps/ferrostar/blob/main/.github/workflows/ios-release.yml){rel=""external""}. In the next installment, we'll cover the build process and packaging for Android. Give us a follow on social media, join our Slack or Discord communities, or subscribe to our mailing list to get the news first! # Generally Available: Geocoding & Autocomplete Search with SDKs We are excited to announce the immediate general availability of Stadia Maps Geocoding & Autocomplete Search APIs, the next step as we build the Alternative Location Platform. With these APIs, developers can create all-new user experiences critical for many products. Starting today, it is easier to solve key back-office problems such as finding the geographic location of an address, converting between natural-language input and geographic coordinates, and adding autocomplete search for even better and more immersive map experiences. As with all our APIs, these solutions combine the power of open data and open-source software and run on the same infrastructure platform as our existing reliable, affordable, and private location services. To create the best available library of global places, we combined multiple open data sets, including OpenStreetMap, OpenAddresses, and more into one coherent API. Developers can rely on flexible filtering options to limit searches by country, bounding box, and more. When integrating, the rich API responses provide all the required data, with no extra work. Continuing our tradition of building on open source, we started by building on the excellent work of the [Pelias](https://www.pelias.io/){rel=""external""} project and its team. We then connected it with our existing services—with many more integrations planned, and we added our own Stadia twist. We will contribute improvements and bug fixes back to Pelias and other projects so that everyone can benefit. ### Forward & Reverse Geocoding Developers around the world use forward and reverse geocoding to help users and computers work with geospatial data. Geocoding provides conversion between places described by natural language, such as addresses, points of interest, or city names, and geographic coordinates, such as `35.6895, 139.69171`. For the developer adventuring into the unknown, our address search is complemented by intelligent approximation. This allows for a high-probability result, even for addresses that aren’t on the map. Using this, last-mile delivery and other services are able to ensure deliver of a package to even the newest apartment building. If your data is already structured, such as input from an address form, the Structured Geocoding API provides the same geocoding capabilities as the standard endpoint. This API enables easy lookups based on labeled fields such as city, street, and country, and improves the quality of results when there are only a few inputs available. ### Autocomplete Search ![Autocomplete Search Example](https://stadiamaps.com/images/content/autocomplete-search-example.gif) Developers and users are familiar with the ubiquitous autocomplete search box on maps. By adding support for search-as-you-type functionality, Stadia Maps enables a range of user experiences. These include autofilling address forms for e-commerce and creating interactive map integrations that make it easy for users to find places anywhere in the world. Our users have long requested search functionality for direct integration into maps. Using our new APIs and [integration for MapLibre GL JS](https://www.npmjs.com/package/@stadiamaps/maplibre-search-box){rel=""external""}, developers can quickly build a map with a search box for any platform. ### SDKs To make it easier for everyone to integrate these new APIs, we've developed SDKs. Today, we're launching the [TypeScript (JavaScript) SDK](https://docs.stadiamaps.com/sdks/javascript-typescript/){rel=""external""} and the [Python SDK](https://docs.stadiamaps.com/sdks/python/){rel=""external""}, which support geocoding, routing, and a few other APIs. We plan to add Kotlin and more in the near future. Want to see a SDK in your favorite language? Drop us a line to help us prioritize which SDKs to build next! ### Pricing In alignment with our mission of making maps affordable and transparent, we have set competitive prices for our new Geocoding & Autocomplete Search APIs. Each request uses 30 credits, with precise costs depending on the plan you select and your specific usage. Autocomplete Search is available on all plans—including our Free plan! However, Geocoding endpoints (forward, reverse, and structured) require a paid plan. Additionally, storing geocoding results for future use requires a Standard plan or above. ### Learn More & Next Steps - Find pricing details on our [pricing page](https://stadiamaps.com/pricing/). - Read documentation about [geocoding](https://docs.stadiamaps.com/geocoding-search-autocomplete/overview/){rel=""external""} and [SDKs](https://docs.stadiamaps.com/sdks/overview/){rel=""external""} on our docs site. - [Schedule a call](mailto\:support@stadiamaps.com?subject=Tell%20Me%20More%20About%20Geocoding) to learn more. - [Create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_medium=blog&utm_campaign=geocoding_launch&utm_content=geocoding_ga_announcement){rel=""external""} to start building today! # Enriching Geocoding & Search: More Data, Smarter Deduplication, and Forward & Reverse v2 On the heels of our last geocoding update for our Autocomplete and Place Details endpoints, we're excited to announce another major update to Geocoding & Search: - v2 of our Forward and Reverse geocoding endpoints, - label improvements for v1 endpoints, - enhancements to Autocomplete deduplication, - a collection of multi-language improvements, - and another significant Foursquare OS Places update. ## New Address Delimiter Parsing in Forward Geocoding We've improved how we handle delimiters for house and building numbers, and their different ways they are represented around the world. With this update, you can now easily and more accurately search for addresses such as `Telliskivi 60a/3, Tallinn` or `Kossuth Lajos utca 20. IV/15, 1053 Budapest, Hungary`. ## Improved Regional Context with Reverse Geocoding Full contextual hierarchy is now available in all Reverse Geocoding responses, providing a straightforward path when you care about the context rather than a specific physical feature (e.g., in coarse lookups). Previously, the `/reverse` endpoint behavior depended on which layers you explicitly included. When searching for an address, street, or venue (POI), we served up the full context: locality, region, country, and so on. But for a coarse lookup, the API only included layers you *explicitly* specified and dropped everything else (e.g., country code). We have fixed this in both v1 and v2, and all responses include a complete contextual hierarchy, regardless of your search. This response style matches the way our other search endpoints work and does not break any assumptions about result ordering. With v2, just like v1, you'll receive the most granular layer result first based on your query. ## Better Label Responses in v1 Endpoints Labels generated from the Who's on First source are now much more sensible for places across the globe. For instance, where the API used to return `Seoul, Yongsan-gu, Seoul, South Korea`, we now simply return `Seoul, South Korea`. All v1 APIs now include this improvement except `/v1/search/structured`. ## Deduplication and More Relevance in Autocomplete Our Autocomplete API enables seamless searching across many sources, including Foursquare OS Places, Geonames, OpenStreetMap, OpenAddresses, and Who's On First. While using such a broad range of sources ensures we have the best global coverage, it presents a deduplication problem when a location is present in multiple sources. With our smarter deduplication process, we’ve eliminated duplicate results across a range of location types: - Tighter deduplication of addresses across our datasets; - Leveraging the ease of edits in OpenStreetMap, OSM addresses are now preferred over other sources when there is a collision; - More relevant results for focused searches, especially when searching for dense chains like 7-Eleven or Starbucks; - East Asian language deduplication improvements when comparing inconsistent naming between sources; - Better deduplication of place names with exotic Unicode representation (e.g., a stylized "𝐀𝐂𝐌𝐄, 𝐈𝐍𝐂." is considered the same as "ACME, Inc.") ## Multi-Language Query Improvements We updated the v1 and v2 `/search` endpoint to take into account the `lang` parameter when querying for POIs, improving the quality of multilingual name searches. Previously, if you were querying POI names in another language (e.g., the English name of a cafe whose primary name is Korean), you would receive zero results when using Search. ## Foursquare OS Places Update We have now included an additional 8 million places from Foursquare OS Places, bringing the total number of available POIs from Foursquare to about 14 million. ## Available Today All of these improvements are available for you today! If you're using our [SDKs](https://docs.stadiamaps.com/sdks/overview/?utm_source=marketing_site&utm_medium=blog&utm_campaign=geocoding_v2_improvements_announcement&utm_content=sdk_cta){rel=""external""}, update to the latest version. ## Learn More and Get Started Ready to experience the power of Geocoding & Search v2? Here are some helpful resources to get you started: - [Autocomplete Search SDKs](https://docs.stadiamaps.com/sdks/overview/?utm_source=marketing_site&utm_medium=blog&utm_campaign=geocoding_v2_improvements_announcement#autocomplete-search){rel=""external""} - [API Clients/SDKs](https://docs.stadiamaps.com/sdks/overview/?utm_source=marketing_site&utm_medium=blog&utm_campaign=geocoding_v2_improvements_announcement&utm_content=sdk_reference){rel=""external""} - [v2 Migration Guide for Developers](https://docs.stadiamaps.com/geocoding-search-autocomplete/v2-api-migration-guide/?utm_source=marketing_site&utm_medium=blog&utm_campaign=geocoding_v2_improvements_announcement){rel=""external""} - [Geocoding Documentation](https://docs.stadiamaps.com/geocoding-search-autocomplete/overview/?utm_source=marketing_site&utm_medium=blog&utm_campaign=geocoding_v2_improvements_announcement&utm_content=foursquare_beta_next_steps){rel=""external""} We're confident Geocoding & Search v2 will significantly enhance your ability to build location-aware applications. With more data and improved results, it's never been a better time to leverage the power of location with Stadia Maps. Start exploring today and unlock the full potential of location search in your current or next project! ### Account and API Key If you don’t already have an account, [create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_medium=blog&utm_campaign=geocoding_v2_improvements_announcement){rel=""external""} to start building today—no credit card is required. --- ## Stadia Maps Community Stay connected with Stadia Maps: - Join our community on [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""} or [Slack](https://slack.openstreetmap.us/){rel=""external""} to share what you're working on or get help. - Follow us on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, [BlueSky](https://bsky.app/profile/stadiamaps.com){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign up for our [mailing list](https://eepurl.com/gs51fD){rel=""external""} to stay up to date. # Announcing Foursquare OS Places Beta Our geocoding and autocomplete search APIs provide fast and accurate place-to-coordinate matching. Starting today, with our latest geocoding update, we are including even more data, smarter searches, and better localization for our users. ## Millions of new POIs with Foursquare OS Places data We're excited to introduce Foursquare as a new data source, bringing even richer location data and improved search capabilities to all of our geocoding endpoints. With this update, we have unlocked access to millions of new points of interest worldwide, making it easier for you to find the places you are looking for. Since we're launching this as beta data source, you'll need to opt in to participate. To opt in, just add `foursquare` as a source in your request. And just like other open data sources, you can submit corrections if you find a mistake (we'll pick them up in our next update)! Check out the Foursquare's [Placemaker program page](https://opensource.foursquare.com/placemaker/){rel=""external""} for details. ## Expanded Localization Our geocoding and search APIs can return place names in dozens of languages. This update expands our localized name coverage with more than 250,000 additional place names. Whichever language your users speak, they'll see better results. ## Smarter Fuzzy Search and Interpolation We fine-tuned our search capabilities to better handle house numbers with letters (e.g. 13L) and varied postal code spacing, ensuring more accurate matches and prioritized results. Similarly, we have also enhanced our address interpolation, making results even more precise when exact house numbers aren't available. ## Available Today All of these improvements are available immediately! If you're using our [SDKs](https://docs.stadiamaps.com/sdks/overview/?utm_source=marketing_site&utm_medium=blog&utm_campaign=foursquare_beta_announcement&utm_content=sdk_cta){rel=""external""}, update to the latest version to include the Foursquare source. All other improvements are automatic without any further action. ## Learn More & Next Steps - [Create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_medium=blog&utm_campaign=foursquare_beta_announcement){rel=""external""} to get an API key. You can start building today without a credit card! - Get started today by diving into the details in our [geocoding documentation](https://docs.stadiamaps.com/geocoding-search-autocomplete/overview/?utm_source=marketing_site&utm_medium=blog&utm_campaign=foursquare_beta_announcement&utm_content=foursquare_beta_next_steps){rel=""external""}. - Join our community on [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""} or [Slack](https://slack.openstreetmap.us/){rel=""external""} to share what you're working on or get help. - Follow us on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, [BlueSky](https://bsky.app/profile/stadiamaps.com){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [mailing list](https://eepurl.com/gs51fD){rel=""external""} to stay up to date. # Mapping Infrastructure v2 Release After months of painstaking development, testing, data gathering, deployment and a few seconds to flip the switch, we are pleased to announce Stadia's mapping data infrastructure, version 2! Shortly after starting Stadia Maps in 2017, we realized our method of processing, development, and deployment of mapping data was limited. We could not deliver the quality maps our customers need or our inner perfectionists demand. We wanted to quickly deploy updates and iterate on designs to make our maps more useful and beautiful. We wanted to add new features without months of lag from testing to production. Ultimately, we wanted a platform that would allow us to deliver an improved mapping experience every single day. So last year, we began investing in a new mapping infrastructure that could deliver all the features we hoped for (plus a few new ones we’ve discovered along the way). To accomplish that, we needed to control the pipeline all the way from ingesting source data to displaying the maps for our users. As of today, our dream is reality and your maps are getting loads of improvements, all because our mapping data is delivered from a pipeline 100% managed by us. ## Improvements ### Data Updates We are now delivering data from early August 2019, and plan to deliver at least monthly updates to our underlying mapping data to allow you and your customers to have the latest data possible. ### Improved Language Support :content-twenty-twenty{afterSrc="/assets/2019-new-tiles-language.png" beforeSrc="/assets/2019-old-tiles-language.png"} We’ve added support for many new languages in our themes, and we have plans to add another major source of data to extend our language coverage to as many places and languages as possible. We’ve added the following languages and scripts to our themes (in alphabetical order): - Armenian - Bengali - Devanagari - Ethiopian - Georgian - Hebrew - Khmer - Lao - Myanmar (Burmese) - Tamil - Thai If you know of any language or script we don’t currently support, please let us know! ### Extended National Park and Nature Reserve Coverage :content-twenty-twenty{afterSrc="/assets/2019-new-national.png" beforeSrc="/assets/2019-old-national.png"} We believe our Outdoor theme is critical for our customers who focus on everything that happens outside the confines of a car or building. Until today, the Outdoor theme was missing a pretty critical piece of data: labels for national parks and official nature reserves—the places we all enjoy hiking, biking, swimming, or just soaking in the aura of nature. We also updated mountain peaks to include elevation data (where available), and we made small tweaks to display mountain peaks more often and with somewhat better selection based on relative importance. (We believe there’s still room to improve this further in later updates.) Now you and your customers can go forth and enjoy nature—with full awareness of what to call the place they are enjoying it. ### Improved Bay and Water Label Visibility :content-twenty-twenty{afterSrc="/assets/2019-new-water.png" beforeSrc="/assets/2019-old-water.png"} Another important piece of location awareness is out to sea—more specifically, bays and other smaller bodies of water. We’ve added labels for smaller bays and waterways to make that favorite lagoon a bit easier to find. ## What’s next? We have a lot of updates on the heels the new pipeline. Because it allows quick iteration, we plan to add the following data to our core data and themes as appropriate over the next few months: - Ocean Bathymetry - Contour lines - Hillshading - …and more! We will soon be releasing our geospatial APIs (starting with elevation and time zones) and offer improved routing for bicycles based on the elevation data. We’re also hard at work developing our enterprise level plans to meet even the most demanding business needs. ## Talk to us! And we want to hear from you! If there’s anything you need to make your mapping experience more fantastic, just let us know. We’re always ready to help and answer your questions at or your favorite social channel (links in footer). # Introducing Stadia Maps Geocoding & Search v2: Supercharge Your Search At Stadia Maps, we're dedicated to helping millions of users find their perfect starting point every month with our powerful Autocomplete Search. Today, we're thrilled to announce a significant upgrade: Geocoding & Search v2! The latest version of [Stadia Maps Geocoding & Search](https://stadiamaps.com/products/geocoding-search/) isn't just an incremental update; it's a significant leap forward. We've integrated millions more places and addresses, achieved faster API responses, and delivered better, more relevant results with enhanced language support—especially for non-English queries. Additionally, we're introducing a new API and billing structure for Autocomplete, designed to make this essential feature even more accessible. This new structure enables us to reduce the cost of a typical session by almost 80%, making it more affordable for everyone. And that's not all! We're also making Geocoding & Search more accessible for everyone. [Forward Geocoding](https://stadiamaps.com/products/geocoding-search/geocoding/) and [Place Details](https://docs.stadiamaps.com/geocoding-search-autocomplete/place-details/?utm_source=marketing_site&utm_campaign=geocoding_v2_launch_announcement){rel=""external""} are now available to all users, even if you're on the Free plan. ## More Data, More Possibilities We're all about providing you with the most comprehensive and accurate location data. With Geocoding & Search v2, we've significantly expanded our horizons: - **Expanded address coverage:** We've added 4 million more addresses worldwide. What does this mean for you? Simply put, more people will be able to find the exact addresses they're looking for. - **Foursquare integration:** We've integrated [Foursquare's Places](https://stadiamaps.com/blog/geocoding-foursquare-beta/){rel=""external""} dataset, adding over 10 million records to our existing robust sources (OpenStreetMap, OpenAddresses, and GeoNames). By carefully integrating and deduplicating this massive dataset, we're enriching our place information and ensuring you get the most comprehensive results. ## Smarter Pricing for Autocomplete: Making It Even More Affordable We understand that efficient and cost-effective tools are crucial. That's why we've completely revamped our Autocomplete pricing model to better align with the value it delivers, making it a smart investment for your business. - **Nominal costs while typing:** While a user searches, each API call will now cost only 1 credit (down from 20 credits!). This means you can provide instant feedback to your users without worrying about high costs. - **Standard cost on selection:** Once the user selects a result, you can easily retrieve the full details using the `/place_details` endpoint, and the standard cost of 20 credits will apply. This fundamental shift in pricing makes our powerful Autocomplete endpoints accessible to a wider range of users and applications, and—finally—the economics make sense. ## Better Results: Improved Accuracy, Relevance, and Language Precision We're committed to delivering the best possible search experience. With Geocoding & Search v2, you'll notice significant improvements in result quality. - **Enhanced multilingual support:** We improved accuracy and relevance when searching in languages other than English, ensuring a more inclusive and comprehensive search experience for all users. - **Smarter Deduplication:** We've tackled the tricky issue of deduplicating similar Points of Interest (POIs). We've squashed bugs and implemented smarter logic, resulting in a cleaner and more intuitive search experience for all searches. - **Reduced Bias for English:** We've removed the assumption of English as the default language, meaning requests without a `lang` query parameter or an `Accept-Language` header will yield more accurate results in the relevant local language. - **Foursquare Data Advantage:** Integrating Foursquare data provides us with richer information about each place, allowing us to understand and conflate data from various sources better, ultimately leading to more relevant and informative results. - **Better, Faster Responses**: The v2 autocomplete endpoint includes a streamlined response format with everything you need to build the UI and an ID you can use to look up the full details. ## What's Next? This is just the beginning! We're excited about the future of Stadia Maps Geocoding & Search. Here's a sneak peek into what else we’re working on. - **Additional endpoints:** The rest of our Geocoding endpoints will also be upgraded to v2, benefiting from the new infrastructure and improvements. - **Continued improvements for v1:** We're not forgetting our existing Geocoding & Search v1 users. We’ve already rolled out many of the improvements to v1, and we will continue applying as many improvements as possible to the current endpoints, ensuring everyone benefits from our enhanced data. - **Updated SDKs:** We have already updated our SDKs to use the new Autocomplete API. Upgrade today to start saving! - **More datasets:** We're constantly exploring and integrating new datasets further to enhance the accuracy and coverage of our services. ## Learn More and Get Started Ready to experience the power of Geocoding & Search v2? Here are some helpful resources: - [Autocomplete Search SDKs](https://docs.stadiamaps.com/sdks/overview/?utm_source=marketing_site&utm_campaign=geocoding_v2_launch_announcement#autocomplete-search){rel=""external""} - [API Clients](https://docs.stadiamaps.com/sdks/overview/){rel=""external""} - [Transition Guide for Developers](https://docs.stadiamaps.com/geocoding-search-autocomplete/v2-api-migration-guide/?utm_source=marketing_site&utm_campaign=geocoding_v2_launch_announcement){rel=""external""} We're confident that Geocoding & Search v2 will significantly enhance how you build location-aware applications. With more data, smarter pricing, and better results, it's never been a better time to leverage the power of Stadia Maps. Start exploring today and unlock the full potential of location search! # Map Style Improvements and House Number Layer Today, we’re announcing a significant set of improvements to our map data and styles. For our Alidade family of styles, it's the most significant since we launched five years ago! ## Low Zoom Improvements :content-twenty-twenty{afterSrc="/assets/2022-new-z0.png" beforeSrc="/assets/2022-old-z0.png"} By reducing label crowding at z0, improving the display of oceans in several styles, and fixing cut labels, we have dramatically improved the quality of our lower zoom levels. These improvements and fixes are most noticeable for users of our raster [map tiles](https://stadiamaps.com/products/maps/interactive-basemaps/) and [static maps](https://stadiamaps.com/products/maps/static-maps/). ## Improved Legibility :content-twenty-twenty{afterSrc="/assets/2022-new-countries.png" beforeSrc="/assets/2022-old-countries.png"} We have differentiated a number of features better in this style update to improve legibility. The most obvious change is with country names, which are now much easier to pick out due to more distinctive typography. We’ve similarly improved the legibility of water, state, and neighborhood labels in our Alidade Smooth and Outdoors styles. ## Highway Shields :content-twenty-twenty{afterSrc="/assets/2022-new-highways.png" beforeSrc="/assets/2022-old-highways.png"} Minimalism has always been a guiding design principle for our Alidade Smooth family of styles. As a result, every addition should enhance legibility while keeping your data front and center. Highway shields pass this test with flying colors and will provide valuable context for any data set. We currently offer several styles of shields within the US based on the highway type (e.g., different shields for interstates and state route). Shields for US state routes and national highway networks outside the US are planned for future updates. ## House Numbers :content-twenty-twenty{afterSrc="/assets/2022-new-nycz14.png" beforeSrc="/assets/2022-old-nycz14.png"} You asked; we listened! Our vector tiles at z14 now include a house number layer, and you can see it in action on our OSM Bright style. If you would like to add house numbers to another style, check out our revamped [tutorial](https://docs.stadiamaps.com/custom-styles/){rel=""external""}. # Mapbox GL JS v2 Licensing and Stadia Maps Yesterday (Dec. 8th, 2020), in conjunction with the v2 release of the Mapbox GL JS library, the code was re-licensed to require an active commercial license and subscription agreement with Mapbox. As a result, if you are currently using Mapbox GL JS v1 with Stadia Map tiles and upgrade to v2, you will need to pay Mapbox (as well as Stadia Maps) for map usage. For now, please continue using Stadia Maps' map tiles with version v1.13 or below. Since these versions are fully open source and freely licensed, you will not incur any additional charges and your maps will continue to function as expected. Stadia Maps is actively working to build consensus towards a community-driven, fully-open and free fork of Mapbox GL JS v1, and we will continue to support and collaborate on these efforts going forward. If you’re a developer or an organization utilizing the Mapbox GL JS or GL Native libraries and are looking for an alternative, feel free to reach out. We will continue working together for a more open and more accessible open mapping ecosystem. # Our SwiftUI DSL Is Joining the MapLibre Family We're thrilled to announce [MapLibre SwiftUI DSL](https://github.com/maplibre/swiftui-dsl){rel=""external""} has graduated from the Stadia Maps labs to become a [MapLibre](https://maplibre.org/){rel=""external""}-hosted project. The project makes MapLibre a first-class citizen in SwiftUI apps, and fills an important gap in the iOS developer experience for MapLibre. The project began when our co-founder Ian Wagner wanted MapLibre to have a developer experience that rivaled MapKit for SwiftUI. [Jacob Fielding](https://github.com/archdoog){rel=""external""} ([Rallista](https://rallista.app/){rel=""external""}), [Patrick Wolowicz](https://subzero.eu/){rel=""external""} and [Patrick Kladek](https://github.com/Patrick-Kladek){rel=""external""} ([HudHud](https://hudhud.sa/en){rel=""external""}) shared the vision and joined the project, contributing significantly to the development and success of the project. We're grateful for their ongoing contributions, and for the support from their respective companies. By transitioning to a MapLibre hosted project, the SwiftUI DSL will have more visibility, and will unify ongoing initiatives to make MapLibre work better with SwiftUI. ## Modernizing the Map Developer Experience Before the SwiftUI DSL, developers had to build their own wrapper views to use MapLibre in a SwiftUI app. This was a lot of work—often duplicating what others had already done—and required a deep understanding of MapLibre Native's Objective-C API. The SwiftUI DSL makes this largely a thing of the past. With just a few lines of code, developers can overlay custom layers, bind the camera to reactive state, and set up custom gestures. For library authors, the DSL unlocks a whole new level of composability. It's now easy to offer a "default" experience that users can customize. Our own [Ferrostar navigation SDK](https://docs.stadiamaps.com/sdks/ferrostar/?utm_source=marketing_site&utm_campaign=swiftui_dsl_maplibre){rel=""external""} leverages this pattern, giving developers the power to add custom map layers, overlays, and controls on top of a map during turn-by-turn navigation. This sort of behavior is extremely difficult and error-prone in UIKit, but is a breeze in SwiftUI. We're excited to see more library authors adopting this approach too. ## Learn More & Next Steps - Check out our [quickstart](https://docs.stadiamaps.com/native-multiplatform/maplibre-gl-native/?utm_source=marketing_site&utm_campaign=swiftui_dsl_maplibre#ios){rel=""external""} to build your first map with SwiftUI. - Find the source code on [GitHub](https://github.com/maplibre/swiftui-dsl){rel=""external""} (and give it a star!). - Join the `#maplibre-swiftui-compose-playground` channel in the [OpenStreetMap US Slack](https://slack.openstreetmap.us/){rel=""external""} to get help or join the development effort. - Follow Stadia Maps on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [newsletter](https://eepurl.com/gs51fD){rel=""external""} to hear about exciting developments first. # Helping Businesses Deliver Location Experiences Before, During, and After COVID-19 The impact of COVID-19, directly as a health crisis and indirectly as an economic crisis, are widespread, deep, and likely to alter the landscape of the world. As Bob Dylan so elegantly sang in 1963: “The times they are a-changin'.” The situation is critical for many small businesses as lockdowns and stay-at-home orders loom larger. Two months of missing (or substantially reduced) revenues would force 17% of businesses to close, 30% of businesses to eliminate expenses or defer payments, and almost 50% of businesses to tap into owners' own money to stay afloat.[1](https://stadiamaps.com/#footnote-1) Not knowing what tomorrow brings means businesses must adjust to a drastically different world. Stadia Maps began in 2016 because a small business couldn't deliver a map to its customers without unsustainable costs. As a result, we spent the last 4 years building a platform that allows businesses to maintain location-based services without the uncertainties of volatile bills, compromising customers' privacy, or curtailing the services offered. Today, our services are uniquely positioned to give your business a path forward with online maps and navigation—whether you are struggling to justify hundreds or thousands of dollars in monthly bills and looking for a more affordable option, or just seeking a solution that better fits your mission. ## Location data is vital, but it needn’t be expensive. Maps are vital in today's changing world—in quarantine now and in the future as companies adapt to the new landscape. In fact, for some industries, being able to effectively use location data is the difference between meeting increased demand or failing to deliver. In the world of logistics, delivering a package without ever seeing its path of travel on the map is unthinkable. Delivery companies, couriers services, and many others rely on being able to effectively plan for deliveries. Usually that means putting it all on a map and routing an assortment of trucks, bikes, and scooters so that people can get the necessary goods of daily life, from food and soap to books and exercise equipment. We believe that because maps and navigation are critical to many businesses, they should be affordable. Increased (or decreased) demand shouldn't put your company in a place where you have to choose between effective location services and keeping the doors open. ## Change is afoot. Companies around the world are seeing fortunes made and lost because of COVID-19. One such company, [Saisonbox](https://saisonbox.ch), based in St. Gallen, Switzerland, is [seeing business booming](https://www.tagblatt.ch/ostschweiz/stgallen/gossauer-saisonbox-wird-dank-coronakrise-zum-bestseller-so-lockt-ein-kreatives-junges-bauernpaar-neue-kundinnen-ins-abgelegene-maedertal-ld.1208555) (link in German) as a result of COVID-19. Their vegetable delivery service and direct-from-farm store allows individuals to order fresh vegetables and fruits direct to their home. Unfortunately, other companies are experiencing seesawing demand and chaos that leads to instability and unexpected closure. Beaver Express, a trucking and logistics company in Oklahoma, [closed last month](https://www.kscbnews.net/beaver-express-to-close-its-doors/) after operating for 77 years. The “perfect storm” of COVID-19 was too much for this small business. ## Today (and the Future) Back to Dylan. He didn't stop by saying the times were changing; he went on to sing about the battle born of those changing times: > There’s a battle outside, and it is ragin' :br > It’ll soon shake your windows and rattle your walls :br > For the times they are a-changin' COVID-19 is shaking our windows and rattling our walls—as a world, as communities, as businesses, and as individuals. It's affecting our nerves. It's stressing us out. We're all fighting battles, big and small, to keep ourselves, our families, and our companies together during this time. The world will get through this—of that there is no doubt—but it will see enormous change. Stadia Maps believes we can help businesses be a part of positive change by offering mapping solutions based on open data, respecting user privacy, and offering a more accessible and more affordable product. ## We're here to help. If your company is struggling with burdensome location data bills, or you are considering removing or hiding location features because they're too expensive to offer, take a look at Stadia Maps. ### Free or Discounted Services If you have a project that is directly used in efforts to combat COVID-19, we offer discounts of 50%–100% for these projects. For example: we're pleased to support the [Coronastatus project ](https://github.com/BustByte/coronastatus/), a tool to help track symptoms across countries. Just contact us if your project needs maps or navigation. ## Be human, y'all.2 In the end, choosing the right mapping solution pales in comparison to the effects of this worldwide pandemic. While we are doing all we can to offer helpful location solutions for businesses, we believe that you and your actions—as fellow humans—are the true key to a better future, after the pandemic has passed. We grieve the impact of COVID-19 across the world: loss of employment, loss of company, and loss of life, and we urge you to do everything you can to be kind, be helpful, and be there for others during this time. Stay well, and stay home. ✌ **Notes:** 1. These figures were reported by the Federal Reserve in a recent [study of small businesses ](https://www.fedsmallbusiness.org/medialibrary/FedSmallBusiness/files/2020/2020-sbcs-employer-firms-report)in the US. 2. For our friends not from the Southern US: “Y'all” is short for “you all” or “everyone.” # Official SDK for PHP is Now Available Today we are happy to announce the initial release of our [PHP SDK](https://docs.stadiamaps.com/sdks/php/?utm_source=marketing_site&utm_campaign=php_sdk_launch&utm_content=php_announcement_news){rel=""external""}. This SDK makes it easier than ever to access geocoding, routing, elevation, and time zone information in PHP. ## Improving the Developer Experience Before today, PHP developers accessed the Stadia Maps APIs using an HTTP library (such as cURL) and some JSON processing code. While our APIs are easy to integrate with using standard HTTP libraries, there are several reasons to use one of our SDKs: - Less code to maintain—our SDKs handle the API integration for you! - Discover the API through autocomplete and documentation without leaving your IDE. - Immediately discover and use new features with a package updates. We're always improving our APIs, and we keep the SDKs in sync. ## Our Seventh SDK We're always speaking with users, so when the need of a PHP SDK came up a few times, we saw an opportunity to make development easier. Thanks to our existing [OpenAPI spec](https://docs.stadiamaps.com/api-reference/?utm_source=marketing_site&utm_campaign=php_sdk_launch&utm_content=php_announcement_news){rel=""external""} and experience packaging for other languages, we published the first release in less than a day! The PHP SDK is our seventh official SDK, and complements our existing API clients for TypeScript, Python, Kotlin, and Swift. Now, if you're counting carefully, you may have noticed that we only mentioned five. That's because we also have an [autocomplete search plugin for MapLibre GL JS](https://docs.stadiamaps.com/sdks/maplibre-gl-js-autocomplete-search-plugin/?utm_source=marketing_site&utm_campaign=php_sdk_launch&utm_content=php_announcement_news){rel=""external""}, and a [mobile turn-by-turn navigation SDK](https://docs.stadiamaps.com/sdks/ferrostar/?utm_source=marketing_site&utm_campaign=php_sdk_launch&utm_content=php_announcement_news){rel=""external""}. You can learn more about all of our SDKs at [docs.stadiamaps.com](https://docs.stadiamaps.com/sdks/overview/?utm_source=marketing_site&utm_campaign=php_sdk_launch&utm_content=php_announcement_news){rel=""external""}. ## We Want Your Feedback Are you a PHP developer? We'd love to hear your thoughts on the new SDK! Let us know how you're using it, and how we can make it better. Your feedback helps us continuously improve the SDKs. ## Where to Get It Do you use Composer? We've hosted the package on [Packagist](https://packagist.org/packages/stadiamaps/api){rel=""external""} for easy installation with `composer install`. And if you'd prefer to just download the files directly, you can do that too! Like all of our SDKs, it's completely open-source, and you can find the code and installation instructions on [GitHub](https://github.com/stadiamaps/stadiamaps-api-php){rel=""external""}. ## Learn More & Next Steps - Read our [SDK documentation](https://docs.stadiamaps.com/sdks/overview/?utm_source=marketing_site&utm_campaign=php_sdk_launch&utm_content=php_announcement_news){rel=""external""} for installation instructions and example code. - [Create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_medium=blog&utm_campaign=php_sdk_launch&utm_content=php_sdk_announcement){rel=""external""} to get an API key. Start building today without a credit card! - Join our community on [Slack](https://slack.openstreetmap.us/){rel=""external""} or [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""}, follow us on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [mailing list](https://eepurl.com/gs51fD){rel=""external""}! # New SDK for Swift is Now Available Today we are excited to announce the initial release of our [Swift](https://docs.stadiamaps.com/sdks/swift/){rel=""external""} SDK. Xcode users will get all the goodies like autocomplete, type definitions, and documentation as you type. All API methods leverage the async features introduced in Swift 5.5, which make it easier than ever to write correct asynchronous code. And since it's generated from official OpenAPI spec, you'll be among the first to get access to our latest features. ## We've Listened and Delivered With this latest addition, we now support multiple languages and platform types: - [JavaScript/TypeScript](https://docs.stadiamaps.com/sdks/javascript-typescript/){rel=""external""} - [Kotlin](https://docs.stadiamaps.com/sdks/kotlin-jvm/){rel=""external""} - [Python](https://docs.stadiamaps.com/sdks/python/){rel=""external""} - [Swift](https://docs.stadiamaps.com/sdks/swift/){rel=""external""} We also have a [MapLibre GL JS search box plugin](https://www.npmjs.com/package/@stadiamaps/maplibre-search-box){rel=""external""}. ## Why Use the SDKs? Of course you could write your code to directly interface with our APIs, but there are several benefits to taking advantage of our SDKs: - Save time; no need to write your own API code since you have access to the full range of Stadia Maps geospatial APIs - Easily install via your favorite package manager - Faster access to documentation in your IDE with autocomplete - Always utilize the latest features because when we release a new API, we'll release an updated SDK ## We Want Your Feedback Since this is the initial version of the Swift SDK, we are looking for feedback from the community on updates, features, and improvements that we can incorporate into upcoming releases. ## Where to Find You can find the Swift SDK, and its source code, on [GitHub](https://github.com/stadiamaps/stadiamaps-api-swift){rel=""external""}. ## Learn More & Next Steps - Read documentation about our [SDKs](https://docs.stadiamaps.com/sdks/overview/){rel=""external""} and Plugins on our docs site. - [Create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_medium=blog&utm_campaign=sdk_launch&utm_content=swift_sdk_announcement){rel=""external""} to start building today! - Join our community on [Slack](https://slack.openstreetmap.us/){rel=""external""} or [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""}, follow us on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [mailing list](https://eepurl.com/gs51fD){rel=""external""}! # Three New SDKs and MapLibre GL JS Search Plugin Are Now Available Today we are excited to announce the initial release of three SDKs ([JavaScript/TypeScript](https://docs.stadiamaps.com/sdks/javascript-typescript/){rel=""external""}, [Python](https://docs.stadiamaps.com/sdks/python/){rel=""external""}, and [Kotlin](https://docs.stadiamaps.com/sdks/kotlin-jvm/){rel=""external""}), along with a [MapLibre GL JS search box plugin](https://www.npmjs.com/package/@stadiamaps/maplibre-search-box){rel=""external""} for Stadia Maps services. ## We've Listened and Delivered These four projects round out our support for a large portion of our existing user base, including all browser-based apps and many popular backend use cases too. ## Why Use the SDKs? Of course you could write your code to directly interface with our APIs, but there are several benefits to taking advantage of our SDKs: - Save time; no need to write your own API code since you have access to the full range of Stadia Maps geospatial APIs - Easily install via your favorite package manager - Faster access to documentation in your IDE with autocomplete - Always utilize the latest features because when we release a new API, we'll release an updated SDK ## MapLibre GL JS Search Box Plugin Our MapLibre GL JS plugin builds off of our JavaScript SDK and this plugin makes it easy and straightforward to add an autocomplete search box to your maps with just a few lines of code, all while leveraging best practices (debouncing of requests, caching of previous results, and navigating to the chosen result) for the autocomplete search API! Now you can easily implement an address auto-fill form for your e-Commerce application, saving your customers time and headaches on the backend due to bad input data. You can also use autocomplete to find: - Points of interest such as major landmarks, airports, campuses, etc. - Administrative areas (e.g. neighborhoods, cities, states, countries, etc.) - Postal codes - And more... ## We Want Your Feedback Since these are the initial versions of each SDK and plugin, we are looking for feedback from the community on updates, features, and improvements that we can incorporate into upcoming releases. ## Where to Find You can find the releases, and their source code, in the usual places: - JavaScript SDK: [npm](https://www.npmjs.com/package/@stadiamaps/api){rel=""external""} | [GitHub](https://github.com/stadiamaps/stadiamaps-api-ts){rel=""external""} - Python SDK: [PyPi](https://pypi.org/project/stadiamaps/){rel=""external""} | [GitHub](https://github.com/stadiamaps/stadiamaps-api-py){rel=""external""} - Kotlin SDK: [GitHub Packages](https://github.com/stadiamaps/stadiamaps-api-kotlin/packages/1887775){rel=""external""} | [GitHub](https://github.com/stadiamaps/stadiamaps-api-kotlin){rel=""external""} - MapLibre GL JS Plugin: [npm](https://www.npmjs.com/package/@stadiamaps/maplibre-search-box){rel=""external""} | [GitHub](https://github.com/stadiamaps/maplibre-search-box){rel=""external""} ## Learn More & Next Steps - Read documentation about our [SDKs](https://docs.stadiamaps.com/sdks/overview/){rel=""external""} and Plugins on our docs site. - [Create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_medium=blog&utm_campaign=sdk_launch&utm_content=maplibre_plugin_announcement){rel=""external""} to start building today! - Join our community on [Slack](https://slack.openstreetmap.us/){rel=""external""} or [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""}, follow us on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [mailing list](https://eepurl.com/gs51fD){rel=""external""}! # New Plans & Pricing in 2023 ## What’s Changing Effective today, we are updating our pricing policies and plans. We have identified some ways our current pricing causes confusion, and we are updating how accounts are granted access to features. ### Change #1: Account Usage The biggest change is how account usage is calculated. First, plans will now have a monthly usage limit instead of a daily usage limit. Second, we are replacing "map views" and "API requests" with a single, simplified credit system. Each plan will come with an included amount of credits for each month, and each request you make to our APIs will use a set number of credits (e.g., a raster map tile will count as 1 credit, a static map as 10 credits, and a route request as 10 credits). For *new* paid plans, we will allow users to choose between the option to be hard limited (i.e., additional requests will be blocked) when the included credits are consumed or accruing additional usage fees. Free plans will continue being hard limited when the usage limit is reached. ### Change #2: Available Features Going forward, each plan will be granted access to a set of APIs. More advanced plans will have access to more features; less advanced plans will have access to fewer features. For example, you will now need the Starter plan to gain access to our Static Maps API or the Standard plan for the new Satellite Basemap. Legacy plans will retain their existing feature set as of January 11th, but will need to upgrade to access new features (ex: satellite basemaps). If you were a subscriber as of January 11th, we have emailed you with a limited time upgrade offer to get a substantial discount on any of the new plans. You can see all the details about our new pricing on our updated [pricing page](https://stadiamaps.com/pricing/) # Product Update: Improved Tiles, a New Tier, and Stadia Maps News It’s been a few months since we last updated you on what we’ve been doing around Stadia Maps, and we’ve been able to accomplish quite a lot. ## New Tier: Stadia Growth After talking with customers and looking at our pricing, we realized there was a hole between our Starter and Standard tiers. Enter: *Stadia Growth*. A tier to help you grow, without growing your bills too much. Your $50 / month goes a long way: 75k map views and API requests / day, with all the same great service you’ve learned to count on. Take a look at our [pricing page](https://stadiamaps.com/pricing/) to see how it fits in. ## Better Raster Tiles & Static Maps At the beginning of this year, we knew our raster tiles had occasional edge-case performance issues, some cropped labels, and other minor quality concerns. So, starting in January, we began working towards fixing these issues. We started by directly integrating our raster rendering library into our custom-built tile server (it was previously a separate service). By doing this, we’ve been able to almost completely eliminate our worst-case tail performance for raster tiles and static maps. After seeing promising results during the initial integration, we began tuning the tile server against production loads, and have been able to eliminate more performance bottlenecks. In terms of numbers, our worst-case raster tile rendering performance (the worst 0.1% of tile renders) dropped from 8s to 2s—or 4x faster. At the same time, the 5% worst-case performing requests improved from 512ms to 256ms—or 2x faster. We believe we have more progress to make, but this represents a significant step towards eliminating too-slow tile renders. As a very nice by-product, we’ve been able to drastically improve the quality of our raster tiles (significantly fewer “cut labels” and much better text layout). We are continuing to focus on speed and reliability to ensure the best possible raster map experience possible. Stay tuned for more updates regarding quality and performance in the next few months. ## Improved Outdoors Theme Since our last update, we’ve added the ability to display parks and nature reserves over water, sand and rock land cover types to give beaches and mountain ranges more texture, and—a much requested feature—trails and footpaths at lower zoom levels, all so that you can enjoy the great outdoors just a little bit more. ## Newer Data, Better Depth Another focus this year is to improve our processes for working with OSM data. As a result, we’re on track to release new data each month this year, with an improved schema each time. We’ve also increased the speed of our routing data updates, with new data being added every week. Since January, we’ve added a lot of updates to details of the transportation layer (including the trails and footpaths at higher zoom), improved small details to the water and park layers, and improved vector tile performance for higher zoom levels (especially in complex cityscapes, such as Milan or Tokyo). ## News from Around the Web Over the last few months, we’ve had the chance to read about how some of our customers are [using Stadia Maps to improve their customers’ experiences ](https://medium.com/@onthegomap/on-the-go-map-style-improvements-d24bfb5836e1), the opportunity to [chat with TFIR about how to build better open-source mapping services ](https://www.tfir.io/stadia-maps/), and explore [how we deliver a quality experience for an affordable price ](https://www.linode.com/spotlight/stadia-maps/)with our infrastructure provider, Linode. ## What's Next? In the next couple of months, we will continue to squash remaining performance and quality issues with raster tiles. We are working to hone our data schema to allow for better display of data (specifically more upgrades to the road network to eliminate some holes in our data). We are also close to deploying a new set of geospatial APIs (a time zone API with historical data), after a few setbacks delivering it to production. ## Missing something? Have comments or concerns? We’re always here to help. If you have any questions or concerns about our current services or our future roadmap, don’t hesitate to reach out to us with any of the channels listed in the footer. Of course, you can always email us, we’ll get back to you lickety-split! That’s all for now. Stay well and be kind. ✌ # Announcing Time Zone APIs and a Documentation Refresh We are excited to announce two important product updates today. Following a period of closed beta testing, we are officially releasing our [time zone API](https://stadiamaps.com/products/geospatial-apis/). Along with this release, we’ve given our [developer documentation](https://docs.stadiamaps.com){rel=""external""} long-overdue facelift and added an exhaustive [API reference](https://docs.stadiamaps.com/api-reference/){rel=""external""}. ## Time Zone API Build time zone aware applications with our new Time Zone APIs! Whether you need to determine the local time zone of an event or plan a round-the-world trip, our new Time Zone APIs give you the simple tools needed to make your app a little bit smarter. Our newest API enhances your applications with time zone information for any point on earth. You supply the coordinates, and we provide the time zone in a few useful formats, including the canonical time zone identifier and UTC offset information. In addition to the standard UTC offset, the time zone API provides any special offsets, such as if daylight saving or summer time is in effect. You can also specify an effective timestamp to retrieve the UTC offsets at a point in the past or future. Check out the [documentation](https://docs.stadiamaps.com/tz/){rel=""external""} for the full details. ### Get Stated with the Time Zone API We can’t wait to see what you build with our new Time Zone API. To get you started, we’ve written up a fresh Python tutorial in our [documentation](https://docs.stadiamaps.com/tz/){rel=""external""}. ## Documentation Refresh Speaking of docs, we recently gave our [docs](https://docs.stadiamaps.com/){rel=""external""}. a long-overdue facelift, in large part thanks to [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/){rel=""external""} (which we now [sponsor](https://github.com/sponsors/squidfunk)). This is a *massive* upgrade which includes dark mode, better looking code blocks, improved navigation, and more. We’ve also added a full [API reference](https://docs.stadiamaps.com/api-reference/){rel=""external""} that makes it easier to see all the endpoints we offer, along with comprehensive schema documentation. The new reference is generated from an [OpenAPI specification](https://api.stadiamaps.com/openapi.yaml), which we will keep up to date as we add new endpoints. This machine-readable spec can be used to generate an up-to-date API client in any major programming language, and allows us to provide you with the new handy online API explorer. ## Talk to us! What else do you want to do with our APIs? We’re always happy to hear what else we can do for you or just learn about what you’re working on! You can get in touch via [email](mailto\:support@stadiamaps.com) or the social links below. # Bulk Geocoding API Is Now Available Since we launched our geocoding product, we've learned a lot about what developers need to build applications that convert addresses, places, and more to coordinates. While we've always supported forward, reverse, and structured queries, one thing we haven't supported is making multiple queries in one request. Bulk (also known as batch) geocoding makes it faster and simpler to geocode many addresses at once. Whether supporting a batch job or improving performance of multiple simultaneous requests, our new [Bulk Geocoding API](https://docs.stadiamaps.com/geocoding-search-autocomplete/bulk-geocoding-search/?utm_source=marketing_site&utm_medium=blog&utm_campaign=bulk_geocoding_accounement&utm_content=bulk_intro){rel=""external""} helps developers build more efficient solutions based on the same, high-quality Geocoding API they already know. ## Make up to 5000 Queries—Simultaneously With the new API, you can make up to 5,000 geocoding queries with a single HTTP request. Both [forward geocoding](https://docs.stadiamaps.com/geocoding-search-autocomplete/search/?utm_source=marketing_site&utm_medium=blog&utm_campaign=bulk_geocoding_accounement){rel=""external""} and [structured geocoding](https://docs.stadiamaps.com/geocoding-search-autocomplete/structured-search/?utm_source=marketing_site&utm_medium=blog&utm_campaign=bulk_geocoding_accounement){rel=""external""} are supported. You can even combine multiple requests types in a single bulk request! By using the bulk endpoint instead of individual requests, your queries will be faster. The endpoints' internal parallelization will simultaneously improve throughput, reduce total latency, and simplify the calling code. This new endpoint is useful in environments without easy access to lightweight concurrency and connection pooling, where each request incurs the connection establishment overhead. Older web frameworks, lower-level code, and shell scripts will especially benefit from opting for the bulk endpoint over the standard endpoints. For particularly latency sensitive applications, you can also process the results as they are produced. The endpoint streams the results back as a JSON body, enabling much lower time-to-first-result if required. ## The Same Simple, Affordable Pricing Bulk geocoding is available for all accounts subscribed to our Standard and Professional plans. Each request consumes credits as if you made a request to underlying endpoint directly, so there's no additional fees or credits used. You can find how many credits each API call consumes in our [credit schedule](https://stadiamaps.com/pricing/#credit-schedule). ## Available in our SDKs, cURL, and Everything In-Between As usual, our official [SDKs](https://docs.stadiamaps.com/sdks/overview/?utm_source=marketing_site&utm_medium=blog&utm_campaign=bulk_geocoding_accounement#apis){rel=""external""} are already updated with support for the new API. You can access it from JavaScript, Python, Kotlin, Swift or PHP without writing any new network or parsing code! You can even find a `curl` example in our [API documentation](https://docs.stadiamaps.com/geocoding-search-autocomplete/bulk-geocoding-search/?utm_source=marketing_site&utm_medium=blog&utm_campaign=bulk_geocoding_accounement&utm_content=available_everywhere){rel=""external""} so your shell scripts aren't left behind. ## Learn More & Next Steps - [Create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_medium=blog&utm_medium=blog&utm_campaign=bulk_geocoding_accounement){rel=""external""} to get an API key. You can start building today without a credit card! - Read the [bulk geocoding API documentation and sample code](https://docs.stadiamaps.com/geocoding-search-autocomplete/bulk-geocoding-search/?utm_source=marketing_site&utm_medium=blog&utm_campaign=bulk_geocoding_accounement&utm_content=bulk_next_steps){rel=""external""}. - Join our community on [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""} or [Slack](https://slack.openstreetmap.us/){rel=""external""} to share what you're working on or get help. - Follow us on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [mailing list](https://eepurl.com/gs51fD){rel=""external""} to stay up to date. # Satellite Maps Are Now Available The wait is over! We’re happy to announce the general availability of our [satellite maps](https://stadiamaps.com/products/maps/map-styles/satellite-imagery/). The new maps are now available to all subscribers of our [revamped Standard and Professional plans](https://stadiamaps.com/pricing/), which we announced last week. ## Demo ::cross-platform-map --- center: - 172 - -43.2 scroll-zoom: true zoom: 7 id: map theme: alidade_satellite --- :: Go ahead and explore the map a bit before you keep reading. We'll wait! (Make sure to check out full-screen mode.) If you're designing a real estate platform, planning a city, or building an app for the great outdoors, you need to know the lay of the land. Your customers deserve the best, which is why we’ve partnered with industry leaders to source high-quality imagery that’s typically less than a year old. Our Alidade Satellite style pairs this with a minimalist approach to additional layers to give your data the context it needs. ## Get Access Today We’ve updated our [documentation](https://docs.stadiamaps.com/themes#alidade-satellite){rel=""external""} with everything you need to use the Alidade Satellite style. If you’re already using MapLibre GL or Leaflet, integration is only a few lines of code. And if you’re just getting started, our guides and tutorials will give you a jump start. Sign up for the new Standard or Professional plan, and turn the earth into your canvas today. ::stadia-button --- to: https://client.stadiamaps.com/signup/?utm_content=satellite_news_announcement&utm_source=marketing_site --- Get started with satellite maps! :: # Sponsorship of Two Open Data Projects Stadia Maps leverages open-source mapping technologies and datasets. Since our inception, we have continually contributed our technical expertise back to several projects, including [Valhalla](https://valhalla.github.io/valhalla/){rel=""external""} and [MapLibre](https://maplibre.org){rel=""external""}, as well as open-sourcing some [projects of our own](https://github.com/stadiamaps){rel=""external""}. We are happy to announce our financial support for two organizations, whose work we both rely on and contribute back to: the [OpenStreetMap Foundation](https://osmfoundation.org/){rel=""external""} (Bronze level) and [OpenAddresses](https://openaddresses.io){rel=""external""}. We take pride in contributing monetarily to these organizations, playing our role in helping secure their future. ## Learn More About Stadia Maps - Read more about the [products we offer at Stadia Maps](https://stadiamaps.com/products/){rel=""external""}. - [Create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_medium=blog&utm_campaign=sponsor_organizations&utm_content=sponsorship_osfm_openaddresses){rel=""external""} to start building today! - Join our community on [Slack](https://slack.openstreetmap.us/){rel=""external""} or [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""}, follow us on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [mailing list](https://eepurl.com/gs51fD){rel=""external""}! # Stamen Design × Stadia Maps Today, Stadia Maps and [Stamen Design](https://stamen.com){rel=""external""} are pleased to announce a long-term partnership. Together, we will build mapping services that pair Stamen’s world-class cartography and Stadia Maps’ location platform to make great maps accessible to *everyone*. Historically, this level of cartographic excellence has been reserved for those with deep pockets—but no longer! Building on the foundational work of open data and open source, our strengths combine to crate a new class of map service: maps that are world-class in design and data *and* affordable, private, and fully backed by the reliable infrastructure and responsive support. ![Stamen Tiles](https://stadiamaps.com/images/content/stamen_x_stadia.jpg "Stamen Map Tiles"){style="height: 250px; width: 100%; object-fit: cover;"} The original map tiles. Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap contributors. ## Stamen Map Tiles on Stadia Maps During this first phase of our partnership, we're launching maps based on the widely-used Stamen map tiles. These include the Stamen Watercolor, Stamen Terrain, and Stamen Toner styles that have been on [maps.stamen.com](http://maps.stamen.com){rel=""external""} for years as a free, unsupported tile service. Since launch, these map tiles have found their way into dozens of open source libraries, thousands of projects, and even the [Smithsonian’s permanent collection](https://www.si.edu/newsdesk/releases/watercolor-maptiles-website-enters-permanent-collection-cooper-hewitt){rel=""external""}. ### Refreshed Styles, Modern Tooling, and a Proven Platform As part of this launch, we reworked and refreshed the styles. Stamen rebuilt them from scratch on the modern [MapLibre](https://maplibre.org){rel=""external""} mapping stack. Stadia Maps is serving them using their up-to-date, detailed map data. As with all of Stadia Maps’ services, these map tiles will come with all the same real human support and contractual guarantees, including optional SLAs. ### Flexible & Extensible By rebuilding the styles using modern tooling, we can offer map tiles for vector- or raster-based libraries, with the full flexibility and customization allowed by vector styling. Users will be able to adjust colors, remove and reorder layers, change the default language, and mix-in their own data with ease. ### Get Started with Stamen Tiles on Stadia Maps If you're an existing user of Stamen map tiles, you can learn all you need to know in our [Stamen map tiles migration guide](https://docs.stadiamaps.com/guides/migrating-from-stamen-map-tiles/){rel=""external""}. If you're a new user, you'll just need to create an account and start using the style URLs found in the same guide. Instructions for vector map styles will be released soon. ## The Future This is phase one, and we're just getting started. Together, we intend to launch more products and services based on our complimentary expertise—all on a mission to make world-class cartography accessible to everyone. ## More about Stamen Design & Stadia Maps Since the beginning, quality cartography as been part of Stadia Maps’ DNA. We set out to build a map that was affordable, private, and, most of all, *looked good*. In the past seven years, we’ve succeeded at that and more. You can find our maps, alongside our search, routing, and many other services, at the heart of hundreds’ of products and used by thousands of developers around the world. You can reach Stadia Maps via email at . For the past 20 years, Stamen has helped companies (including Meta, Amazon, and National Geographic), NGOs (including the Dalai Lama and museums around the world), and individuals build beautiful and usable maps. Stamen is an early proponent of using OSM map data to create good maps, and when you look at almost every significant OSM-based mapping project in the last decade, they—or their alumni—have played instrumental parts. You can reach Stamen directly via email at or via their [contact form](https://stamen.com/contact/){rel=""external""}. # Announcing Improved Static Maps with Customizable Lines We are excited to announce the release of our improved static maps product! [Static maps](https://stadiamaps.com/products/maps/static-maps/) enable developers to quickly and easily include maps in their applications as images. Included in this release are many performance improvements, the ability to directly draw lines on the map, and overhauled documentation. ## Polyline Support for Static Maps Since the static maps product launched, customers have requested the ability to draw lines directly on static maps, and today, we are officially announcing support for rendering polylines. With our updated API, developers can save time and resources by using static maps to solve problems where previously interactive maps or some other postprocessing was required. ![a map of markers and a line in Tallinn, Estonia](https://stadiamaps.com/static/alidade_smooth?center=59.438484,24.742595\&zoom=13\&l=oj_kpBkhmen@vFvDlStSdIzN%60BxCfMfShA%60B~@%7CAvCrDpG%60FfVfRb%5CzSrBdBhZx%5CpFdM~BpFn@zAxCrHrH%7CQjOh_@NtM%7CVv@d@aHdHEfD%5E%5CDhCh@nIjFlFvE~CfCzAzAdFjFt@t@~EdG%5DcEc@%7BFm@uF%5DoDgAwJhAm@vMqGoAs%7B@dAMfG_@dE_@Ezb@ExWzBBZ?L@%7CDnTtAqE~CyMp@sB%7C@n@XUx@uBjAiApBi@lBp@hAtAzAClSjJzAkMtAl@dA%7D@~CVbB%60@pDtAN%7DDxD%60AdFi@vBIxBIe@aMuAgPyFwy@%7BCa_@yFar@%5B%7BC_AsGuAkGqEgY_CmLqAuFuHi%5Bm@vBq@hC,333333,5\&m=59.436884,24.742595\&m=59.437485,24.743150\&m=59.434931,24.745442\&m=59.441293,24.747380\&m=59.435561,24.747605\&size=600x250@2x) ## Customizable from the Start Whether you need to visualize a navigation route, a hiking track, or your most recent flight path, adjusting the look and feel is key to a great static map. That’s why we made sure you can fully customize each line to achieve the perfect match to your app, just as you can already do with markers. ![a map of markers and a line in Tallinn, Estonia](https://stadiamaps.com/static/alidade_smooth_dark?center=59.438484,24.742595\&zoom=13\&l=oj_kpBkhmen@vFvDlStSdIzN%60BxCfMfShA%60B~@%7CAvCrDpG%60FfVfRb%5CzSrBdBhZx%5CpFdM~BpFn@zAxCrHrH%7CQjOh_@NtM%7CVv@d@aHdHEfD%5E%5CDhCh@nIjFlFvE~CfCzAzAdFjFt@t@~EdG%5DcEc@%7BFm@uF%5DoDgAwJhAm@vMqGoAs%7B@dAMfG_@dE_@Ezb@ExWzBBZ?L@%7CDnTtAqE~CyMp@sB%7C@n@XUx@uBjAiApBi@lBp@hAtAzAClSjJzAkMtAl@dA%7D@~CVbB%60@pDtAN%7DDxD%60AdFi@vBIxBIe@aMuAgPyFwy@%7BCa_@yFar@%5B%7BC_AsGuAkGqEgY_CmLqAuFuHi%5Bm@vBq@hC,ffdd00,10\&m=59.436884,24.742595\&m=59.437485,24.743150\&m=59.434931,24.745442\&m=59.441293,24.747380\&m=59.435561,24.747605\&size=600x250@2x) With these updates, the static maps experience is faster, smoother, and more integrated than ever before. ## Get Started Today! We've updated our [static maps documentation](https://docs.stadiamaps.com/static-maps/){rel=""external""} so it's even easier to get started building maps. Update your current maps or create your first static map today! ## One More Thing: A new PoP Location in Mumbai ![map of India with Mumbai highlighted](https://tiles.stadiamaps.com/static/osm_bright?m=19.076111,72.8775\¢er=19.076111,72.8775\&zoom=4\&size=600x250@2x) As part of our efforts to support our global customer-base with high-reliability, low-latency, and unbeatable performance, we’re always looking for ways to expand our PoP network. After some unexpected delays, we’re now able to unveil a new PoP region in Mumbai, allowing us to better serve our Indian users. We will continue expanding the network in coordination with our infrastructure partners. New locations in Australia and Canada are already planned. # Traffic-Influenced Routing Is Here (Public Preview) Routing without traffic data works for a lot of use cases. But dispatch systems need ETAs that account for rush hour, ride-hailing platforms need accurate pickup times, and telematics pipelines need traffic context to reconstruct accurate travel times. For these use cases, routing and ETAs that only reflect the road network, without accounting for what's happening on it, fall short. ## Available Today Starting today, Stadia Maps customers on Standard and Professional plans can use traffic-influenced routing, a public preview that brings live and historical traffic data into route calculations across [standard routing](https://docs.stadiamaps.com/routing/standard-routing/){rel=""external""}, [optimized routing](https://docs.stadiamaps.com/routing/optimized-routing/){rel=""external""}, [map matching](https://docs.stadiamaps.com/routing/map-matching/){rel=""external""}, [isochrones](https://docs.stadiamaps.com/routing/isochrones/){rel=""external""}, and [time/distance matrices](https://docs.stadiamaps.com/routing/time-distance-matrix/){rel=""external""}. The traffic data comes from TomTom and covers 80+ countries at launch, layered onto the same OSM-based road network you already use. You get two tiers to choose from, and you can pick per request, so you can use both in the same app: - **Adaptive** balances accuracy and credit cost. A good fit for general routing, isochrones, and map matching. - **Premium** combines real-time conditions with predictive data for the highest accuracy. Ideal where precise ETAs matter, like live fleet routing and matrix requests. Both tiers work across auto, bus, taxi, and truck profiles. And because this is Stadia Maps, you can still tune all the same profile parameters you're used to. Traffic-influenced routing builds on the full Stadia Maps routing stack you already know: not a locked-down replacement, and without the proprietary detour. ## Pricing That Scales With You, Not Against You We built this the way we build everything: with fair, transparent pricing and no gotchas. You pick the routing profile and traffic tier per request, use your existing credits with no surprise minimums, and upgrade with a single profile parameter change. You can finally use traffic-influenced routing with no contract renegotiation, no new SDK, and no mandatory user tracking; your users' privacy is still the default. ## Get Started Traffic-influenced routing is available now in public preview. - See the [Product page](https://stadiamaps.com/products/routing-navigation/traffic-influenced-routing/){rel=""external""} for an overview - Read the [Routing docs](https://docs.stadiamaps.com/routing/standard-routing/#traffic-influenced-profiles){rel=""external""} for profile details - Get started with the [Integration guide](https://docs.stadiamaps.com/guides/getting-the-best-routes-with-valhalla-turn-by-turn-directions-apis/#traffic-influenced-routing){rel=""external""} Already on a Standard or Professional plan? You can start using it right now. On a different plan? [Reach out](mailto\:support@stadiamaps.com?subject=Traffic-Influenced%20Routing%20Trial) and we can set you up with a trial. # Major Update to Our Geocoding and Autocomplete Search Data We just updated the underlying data for our recent [Geocoding and Autocomplete Search APIs](https://docs.stadiamaps.com/geocoding-search-autocomplete/overview/){rel=""external""}. With this release, our city and postal code data for over 50 million US addresses has significantly improved in terms of completeness, accuracy, and searchability. ## Improved Quality and What This Means for Users These improvements offer distinct advantages compared to our competitors' similar APIs in two key areas: ### Enhanced Address Formatting The results for US addresses will now more closely align with the preferred format recognized by the United States Postal Service, ensuring greater consistency and accuracy in address representation. ### Improved Searchability When searching for addresses that have multiple colloquially used city names, users can effectively find the desired addresses by using these additional names, improving your search capabilities and overall user experience. ## Learn More & Next Steps - Read documentation about our [Geocoding and Autocomplete Search APIs](https://docs.stadiamaps.com/geocoding-search-autocomplete/overview/){rel=""external""} docs site. - [Create an account](https://client.stadiamaps.com/signup/?utm_source=marketing_site&utm_medium=blog&utm_campaign=geocoding_launch&utm_content=geocoding_updates_july){rel=""external""} to start building today! - Join our community on [Slack](https://slack.openstreetmap.us/){rel=""external""} or [Discord](https://discord.gg/qRBy6qqtdT){rel=""external""}, follow us on [Mastodon](https://en.osm.town/@stadiamaps){rel=""external""}, [Twitter](https://twitter.com/@stadiamaps){rel=""external""}, or [LinkedIn](https://www.linkedin.com/company/stadia-maps/){rel=""external""}, or sign-up for our [mailing list](https://eepurl.com/gs51fD){rel=""external""}! # Why Basic OpenStreetMap Routing Needs Real-Time Traffic > OpenStreetMap (OSM) provides a world-class geographic foundation, but it remains a static dataset. Without real-time traffic integration, routing engines must rely on algorithmic proxies—like road class and legal speed limits—which often lead to unreliable ETAs and logistics bottlenecks. ## The Problem [OpenStreetMap (OSM)](https://www.openstreetmap.org/about){rel=""external""} is one of the world's leading road maps, but a persistent gap remains between fixed geographic data and a [live navigation experience](https://stadiamaps.com/products/routing-navigation/). Without dedicated traffic data, Estimated Times of Arrival (ETAs) are essentially educated guesses. While OSM is excellent at mapping the world's road network, a static dataset cannot capture the actual driving conditions at this exact moment. In [enterprise-grade logistics](https://stadiamaps.com/blog/beyond-the-car-routing-for-specialized-fleets/), the lack of live data is often the first significant technical hurdle. ## The Limits of Algorithmic Guesswork In the absence of real-time data, a routing engine must estimate travel speeds based on tags and a few common proxies: - **Road Class:** Assuming a motorway is always faster than a residential street. - **Tagged Speed Limits:** Using the legal maximum as the baseline (when the tag even exists). - **Network Density:** Adjusting for urban vs. rural environments. - **Time of Day:** Using low-granularity buckets like "daytime" and "nighttime." Real-world data show wild variances compared to these static estimates. Road class is a blunt instrument for predicting speed. Missing speed limit tags in open datasets force routing engines to rely on broad averages, resulting in unreliable ETAs and logistics delays. Rule-based algorithms are also notoriously bad at predicting choke points because open datasets don't account for traffic light timings, congestion near specific exits, or the "invisible" friction of a busy intersection. ## The Stadia Maps Difference To move from guesswork to precision, we integrated [TomTom's global traffic data](https://www.tomtom.com/products/traffic-apis/){rel=""external""} directly into the [Stadia Maps routing engine](https://docs.stadiamaps.com/routing/){rel=""external""}. High-resolution historical profiles and live feeds allow for accurate, real-time routing. We provide this through three key technical pillars: 1. **Global Coverage:** Access to consistent data across more countries than almost any other vendor. 2. **Rapid Updates:** A traffic latency of approximately two minutes allows our API to suggest alternate routes almost as soon as a wreck occurs. 3. **Historical Profiles:** Deep granularity forms the backbone of predictive routing. High-resolution historical data enables accurate, time-dependent routing in advance, allowing you to plan a route for Tuesday at 8:00 AM based on what might happen on Tuesdays at 8:00 AM. ## Fleet Intelligence at Scale For dispatch, optimization, and fleet operations, [matrix routing](https://docs.stadiamaps.com/routing/time-distance-matrix/){rel=""external""} (calculating the time and distance between many origins and destinations) is the engine's most critical function. The Stadia Maps infrastructure supports matrix requests that are significantly larger than most competitors allow on standard plans. By integrating traffic data directly into these large-scale requests, we eliminate the need for developers to split requests into smaller chunks, reducing unnecessary complexity and latency. Developers maintain full agency over their implementation. We provide the fastest route based on live conditions, but the frequency of re-routing remains entirely in your control. Choice of revalidation frequency puts you in charge of the trade-off between real-time accuracy and [scaling costs](https://stadiamaps.com/pricing/), ensuring your bills remain as predictable as your ETAs. --- [Create a free account](https://client.stadiamaps.com/signup/){rel=""external""} to start building with real-time traffic and high-performance routing today. Our [documentation](https://docs.stadiamaps.com/routing/){rel=""external""} provides everything you need to integrate TomTom-powered precision into your existing OSM workflow. # Are mid-cycle upgrades and downgrades prorated? Yes, any mid-cycle billing changes will be prorated according to the time spent on each plan during the billing cycle. For example, if you start on a $10 plan and upgrade to a $20 plan exactly halfway through the billing period, your next invoice will be $5 higher: a $5 credit for the unused time on the initial plan, plus a $10 charge for the second half of the month on the new plan. Similarly, a downgrade will result in a credit balance on your account which will be automatically applied against future charges. Note that changes will **not** result in an immediate charge or refund to your payment method. Any adjustments will be aggregated on your next invoice. In the case of a net credit balance after a downgrade, we will **not** issue an automatic refund to your original payment method. Please see our refund policy below for details. --- Note: If you have accrued any additional usage, this is transferred over to your new plan, and the new plan’s rate will apply to **all** usage for the billing cycle. # As a non-profit, can I use the Free plan for a project that generates revenue? By default, no, since this meets our *Commercial Use* criteria of generating revenue. We can, however, make exceptions depending on your individual project’s details. Please reach out to us at [support@stadiamaps.com](mailto\:support@stadiamaps.com?Subject=Non-Profit%20Use) and start a conversation. --- Our [paid subscriptions](https://stadiamaps.com/pricing/) are quite affordable, and we will do our best to work with you. # As an academic researcher, can I use the Free plan for my non-commercial research projects and papers? Yes, as long as you meet the definition of **Non-Commercial Academic Use**, which we define as any usage by students, faculty, and staff that benefits non-commercial academic activities (e.g. studies, presentations, papers, projects, etc.) at educational institutions or programs. All usage must include appropriate attribution. You can learn more about what attribution is required from our [attribution guide](https://docs.stadiamaps.com/attribution/){rel=""external""}. --- Below is a non-exhaustive list of some examples to help guide you on what is allowed and not allowed. When in doubt about your *Academic Use*, please reach out to us at [support@stadiamaps.com](mailto\:support@stadiamaps.com?Subject=Academic%20Use). **Acceptable use of the free plan** - In a slide presentation or video for a class - On an interactive website for your department - Included in an article or paper submission to a journal **Requires a paid plan or license** - In an application, website, or other electronic product that generates revenue - On a poster that you designed for revenue ([contact us to discuss licensing](mailto\:support@stadiamaps.com?Subject=Academic%20Use)) - In a textbook that is sold for profit ([contact us to discuss licensing](mailto\:support@stadiamaps.com?Subject=Academic%20Use)) # Can I use my subscription for multiple websites/apps? In general, yes, **as long as the subscription is not shared across multiple entities** (with exceptions for certain forms of reuse in white-labeled products). An entity is typically a natural person or a corporation (for-profit or non-profit). See our [terms](https://stadiamaps.com/terms-of-service/) for more details or [Contact us](mailto\:support@stadiamaps.com) if you have questions about your use case. # Can I use Stadia Maps as a for-profit entity or in a product which is sold or generates revenue? Yes, however, in both cases, you meet our criteria of *Commercial Use* and are required to have an active [paid subscription](https://stadiamaps.com/pricing/) # Can I use Stadia Maps in print, TV, film, or another form of media? Yes, though you may need a paid subscription or a custom license depending on your use case. --- **Acceptable use of the free plan** - Non-commercial use by an individual or non-profit organization - Non-commercial academic use (see above for details) **Acceptable use of a paid plan** - Printing up to 5000 copies of a static map, when the request is made using the designated cacheable endpoint. You must have a paid subscription at the time you generate the cacheable images. The :nuxt-link[addendum to our Terms of Service]{to="https://stadiamaps.com/terms-of-service/#cacheable-terms"} covers which rights that are explicitly granted. - For all other uses, **[contact us](mailto\:support@stadiamaps.com?Subject=Media%20Licensing%20Inquiry) with info about your use case so we can discuss the options available** (up to a perpetual, royalty-free license with worldwide distribution). --- Our :nuxt-link[attribution guide]{target="_blank" to="https://docs.stadiamaps.com/attribution/"} contains details on how the credits should appear. # Do you have documentation? Yes! You can find our extensive documentation and tutorials at [docs.stadiamaps.com](https://docs.stadiamaps.com/){rel=""external""}. # Do you have SDKs available? Yes! We have everything from API clients to drop-in components in many popular languages: - JavaScript/TypeScript - Python - Kotlin - Swift - PHP You can learn more about each one in our [documentation](https://docs.stadiamaps.com/sdks/overview/?utm_source=marketing_site&utm_campaign=faq){rel=""external""}. Don’t see your development language? [Let us know](mailto\:support@stadiamaps.com?Subject=SDK%20Request). Or generate your own with our [OpenAPI specification file](https://api.stadiamaps.com/openapi.yaml){rel=""external""} and tools like [openapi-generator](https://github.com/OpenAPITools/openapi-generator){rel=""external""}. # Do you support custom map styles? Yes! Vector tiles are rendered client-side, and you can restyle them freely with any Stadia Maps plan. We have a complete guide on custom styles in our [docs](https://docs.stadiamaps.com/custom-styles/){rel=""external""}. If you’d like a custom style for raster tiles or static maps, [contact us](mailto\:support@stadiamaps.com) for a quote. # Does having multiple properties affect my billing? No. We offer simple billing where usage is aggregated across all properties in your account. Your account subscription is for all usage, whether you have one property or ten. # How can I cancel a free trial? If you have not given us a payment method such as a credit card, no action is needed to cancel. Your account will automatically revert to the free tier after your trial ends. --- If you already added a payment method but changed your mind, go to your [dashboard](https://client.stadiamaps.com/){rel=""external""} and change your plan to the free tier. This will cancel the subscription and your account will revert to the free tier after your trial ends. # How can I remove the hard credit limit? When you’re ready to go live, [go to the plan upgrade screen](https://client.stadiamaps.com/dashboard/#/plan){rel=""external""}. If you haven’t added a payment method yet, follow the prompts to add your contact details and payment method. After entering your information and confirming the plan you want to upgrade to, click the green upgrade button on the [dashboard](https://client.stadiamaps.com/dashboard/){rel=""external""}. # How do you define commercial use? Use of Stadia Maps’ services commercially requires a paid subscription or (in some cases) a custom license. We consider usage to be commercial in *any* of the following situations: - Use in a product or service that is sold or generates revenue (including via advertising or content monetization) - Use by an organization that is for-profit (regardless of whether the usage generates revenue or not) Even if your usage falls under the above definition, the following usage is acceptable on the Free plan: - Development and testing purposes - Demonstration purposes (products and pages which are exclusively for demonstration purposes) # How is additional usage billed? When you opt in, additional usage is billed on the next invoice after the usage occurs. While our base monthly fees are pre-pay, these charges are then added to your invoice at the end of each billing cycle. For example, suppose you are subscribed to the Standard plan with a billing cycle starting the 1st of each month, and in January, you accrue $20 in additional usage. Your February invoice would be $100: $80 for the Standard plan for February, and $20 for the additional usage in January. --- Note: If you cancel your subscription, any accrued additional usage fees will be invoiced at the end of the billing cycle. # I have multiple domains. Do I need more than one subscription? Generally, no. **But be sure to read our FAQ about sharing a subscription between multiple websites/apps first!** Creating a new property for each domain makes the most sense if you have logically separate products/sites, because it lets you track usage and manage API keys separately. We also support adding multiple domains to a single property on request. [Contact us](mailto\:support@stadiamaps.com) for details. # What are basemaps? Basemaps are the layer of "normal" things you’d expect to see on a map like water, country borders, cities, points of interest, etc. They are called basemaps because they are the "base" that provides context for the markers and overlays you add on top. # What happens when I add a payment method during a trial? When you add a payment method during a free trial, you will be able to select a plan to subscribe to after the trial. We will automatically bill you for the selected plan as soon as your trial ends. You can change your plan selection at any time before your trial ends. # What happens when I cancel my account? Because your subscription is prepaid, your account will remain on your currently selected plan until the end of your billing cycle. After which, your account will be downgraded to the free tier. If additional usage is enabled, you will receive a final invoice for any additional usage accrued through the end of your billing cycle. # What if I have a question that isn’t answered in the FAQ? If you can’t find what you need on our website or documentation, email us at . We’d be delighted to answer any of your questions. # What is MapLibre? [MapLibre](https://maplibre.org/){rel=""external""} is a collective that organizes the development of fully-open and free map rendering tools. Stadia Maps is a founding member, and co-founder Luke Seelenbinder currently serves on the governing board. Together, we form a large and growing network of developers and corporations all working together to advance the state of the art. # What is your refund policy? If you cancel a subscription early or downgrade to a lower plan, your Stripe account may receive a prorated refund in the form of an **account credit** (see the FAQ above). However, we will not normally issue refunds back to your original payment method. Any credit balance will remain on your account for future use. # What limitations apply to trial accounts? Trial accounts have access to the same APIs as our Professional plan, so you can easily evaluate all our services with no obligation. For the duration of the trial, your account will have the same credit limit as a free account. # What map tile formats do you offer? We offer both vector (protobuf-encoded Mapbox Vector Tiles) and raster (PNG) tiles. Static maps are available in PNG (the default) or JPEG format. Our raster tiles and static maps are available in both 1x and 2x scale. On the web, you can use our tiles with well-known JavaScript libraries such as Leaflet for interactive [raster](https://docs.stadiamaps.com/raster/){rel=""external""} maps or MapLibre GL JS for [vector](https://docs.stadiamaps.com/vector/){rel=""external""}. If you’re building for mobile, desktop, or multi-platform, our [docs](https://docs.stadiamaps.com/native-multiplatform/overview/){rel=""external""} provide an overview of the available options. # What platforms do you support? Our maps are supported on all major platforms. This includes all major web browsers, iOS and Android mobile devices, major desktop operating systems, and some embedded platforms. Our [docs](https://docs.stadiamaps.com/){rel=""external""} have tutorials covering the most common ones. Feel free to [contact us](mailto\:support@stadiamaps.com) if you have a question about a specific platform. # What’s a credit? We use a credits system for enforcing limits and metering usage. Every request you make has a cost stated in the credit schedule on our [pricing page](https://stadiamaps.com/pricing/). These are counted against your plan’s monthly credit allowance and, if you have opted in to additional usage, billed at the rate specified in your plan once you exhaust your credit pool. # What’s a static map? A static map is a full map image that you can customize and embed easily without any JavaScript or map rendering library. You can even add features like markers and lines, and our servers handle the drawing for you! Just add a few parameters to the URL. These are great for quickly embedding a non-interactive map in a website or app (ex: via an HTML `img` tag). # About Stadia Maps ## Our mission: Solve *your* location challenges In 2016, Ian and Luke were working on a project for a client with high standards—beautiful map design, incredibly fast loading times, and easy setup, all within a budget that made sense for a small, innovating business. *Sound familiar?* Existing mapping solutions simply couldn't deliver. They were either too expensive or lacked the performance and customization required. So, we decided to build a solution that met our client's needs and raised the bar for what a mapping platform could offer. ## Beautiful maps that enhance *your* brand The first challenge we tackled was map styling. We knew that cluttered or unattractive maps could detract from your valuable data. That's why we created our first custom style, Alidade Smooth—a clean, elegant basemap designed to help *your* information shine. :learn-more-link{product-name="our custom cartography on our Map Styles page." to="https://stadiamaps.com/products/maps/map-styles/customize/"} ## Fast and reliable access, worldwide—so *your* users stay engaged In today's world, speed and reliability are crucial. Delivering hundreds of terabytes of data quickly across the globe is complex, but we were determined to get it right. We’re built on the great work of open-source mapping projects, meticulously analyzing and optimizing every layer of the stack. We engineered improvements to our data pipeline and API delivery infrastructure. This first-principles reimagination of location APIs ensures that millions of map tiles are rendered from billions of data points and delivered to your users in the blink of an eye—no matter where they are. :learn-more-link{product-name="our infrastructure." to="https://stadiamaps.com/infrastructure/"} ## Powerful APIs to enhance location experiences At Stadia Maps, we're more than just a technology provider—we're a team of passionate individuals dedicated to helping you succeed. We're constantly developing location APIs to make it easier for your development teams to build efficient, immersive location-based experiences. We focus on providing the necessary tools to bring your vision to life. :learn-more-link{product-name="our APIs in our documentation." to="https://docs.stadiamaps.com/"} ## Meet the Team #### Stadia Maps: Built by humans, empowering *your* success Successful teams understand their core value, and, at Stadia Maps, our deep appreciation for location powers our business and yours. Though our team spans three continents, this global perspective uniquely equips us to provide seamless and effective location data solutions for your users, wherever they are. ::about-map{:markers="team"} :: --- Let's discuss how Stadia Maps can help you build better, faster, and more beautiful location experiences for your users. We would love to hear from you and start working together. **Human to human.** ::stadia-button{to="mailto:support@stadiamaps.com" variant="secondary"} Message Us :: # Attributions ## Data sources ### [OpenStreetMap](https://www.openstreetmap.org/){rel=""external""} [![The OpenStreetMap Foundation Logo](https://stadiamaps.com/images/content/OpenSteetMap_Foundation_logo.svg)](https://osmfoundation.org/wiki/Corporate_Members){rel=""external""} OpenStreetMap data is released under the [Open Data Commons Open Database License](https://opendatacommons.org/licenses/odbl/){rel=""external""}. We are proud [corporate members](https://osmfoundation.org/wiki/Corporate_Members){rel=""external""} of the OpenStreetMap Foundation. [More Info](https://www.openstreetmap.org/copyright){rel=""external""} ### Satellite and Aerial Imagery Satellite imagery is protected by the copyright law detailed below and international copyright laws, as applicable. | Product | Entity Owner | Credit Attribution | | ---------------- | ---------------------- | ---------------------------------------------------- | | Pléiades | Centre National (CNES) | © CNES (year of acquisition), Distribution Airbus DS | | SPOT 6 and 7 | Airbus DS | © Airbus DS (year of acquisition) | | Pléiades Neo | Airbus DS | © Airbus DS (year of acquisition) | | PlanetSAT Global | Planet Observer | © PlanetObserver (contains Copernicus data) | The product and the satellite imagery data contained therein are further protected by articles L. 341-1 to 343-7 of the French Code of Intellectual Property Law, as amended, and by similar statutes in European countries that have incorporated EU Directive n° 96/9 of 11 March 1996 on database copyright into their laws. ### [OpenAddresses](https://openaddresses.io/){rel=""external""} OpenAddresses data is released under various public-domain and open licenses. We are proud [corporate sponsors](https://openaddresses.io/){rel=""external""} of the OpenAddresses project. ### [GeoNames](https://www.geonames.org/){rel=""external""} GeoNames data is released under the [CC BY 4.0 license](https://creativecommons.org/licenses/by/4.0/){rel=""external""}. ### [Who's on First](https://www.whosonfirst.org/){rel=""external""} Who's On First data is released under various licenses. See [license details](https://www.whosonfirst.org/docs/licenses/){rel=""external""}. ### [Foursquare OS Places](https://opensource.foursquare.com/os-places/){rel=""external""} Foursquare OS Places Data is released under the [Apache 2.0 License](https://www.apache.org/licenses/LICENSE-2.0){rel=""external""}. ### [Elevation datasets](https://github.com/tilezen/joerd/blob/master/docs/data-sources.md){rel=""external""} We include elevation data from the following sources: - ArcticDEM terrain data DEM(s) were created from DigitalGlobe, Inc., imagery funded under NSF awards 1043681, 1559691, and 1542736, and are released without limitation. - Australia terrain data © Commonwealth of Australia (Geoscience Australia) 2017, licensed CC BY 4.0. - Austria terrain data © offene Daten Österreichs – Digitales Geländemodell (DGM) Österreich, licensed CC BY 3.0 AT DEED. - Canada terrain data contains information licensed under the Open Government License – Canada. - Europe terrain data produced using Copernicus data funded by the European Union - EU-DEM layers. - Global ETOPO1 terrain data U.S. National Oceanic and Atmospheric Administration. - Mexico terrain data source: INEGI, Continental relief, 2016, released under Mexico’s free use of information act. - New Zealand terrain data released under CC BY 4.0, LINZ January 2012. - Norway terrain data © Kartverket, licensed under CC BY 4.0. - United Kingdom terrain data © Environment Agency copyright and/or database right 2015, released under the Open Government License 3.0. - United States 3DEP (formerly NED) and global GMTED2010 and SRTM terrain data courtesy of the U.S. Geological Survey, and are available in the public domain. [More Info](https://github.com/tilezen/joerd/blob/master/docs/attribution.md){rel=""external""} ## Design ### Stadia Maps Alidade Smooth Style The Alidade Smooth style is derived from the [Positron GL Style](https://github.com/openmaptiles/positron-gl-style){rel=""external""}. The Positron GL Style is derived from [CartoDB Basemaps](https://github.com/CartoDB/CartoDB-basemaps){rel=""external""} designed by Stamen and Paul Norman for CartoDB Inc., licensed under [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/){rel=""external""}. The Positron GL style’s code is released under the [BSD 3-Clause License](https://www.tldrlegal.com/license/bsd-3-clause-license-revised){rel=""external""}. The Positron GL Style’s design is released under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/){rel=""external""}. [More Info](https://github.com/openmaptiles/positron-gl-style/blob/master/LICENSE.md){rel=""external""} ### Stadia Maps Alidade Satellite Style The Alidade Satellite style incorporates some elements of the Alidade Smooth style. The imagery is also subject to copyright as noted above in our data source listing. ### [OSM Bright GL Style](https://github.com/openmaptiles/osm-bright-gl-style){rel=""external""} The OSM Bright GL Style is derived from [Mapbox Open Styles](https://github.com/mapbox/mapbox-gl-styles){rel=""external""}. The OSM Bright GL Style’s code is released under the [BSD 3-Clause License](https://www.tldrlegal.com/license/bsd-3-clause-license-revised){rel=""external""}. The OSM Bright GL Style’s design is released under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/){rel=""external""}. [More Info](https://github.com/openmaptiles/osm-bright-gl-style/blob/master/LICENSE.md){rel=""external""} ### Stamen MapLibre Styles The Stamen MapLibre GL stylesheets for Toner, Terrain, and their respective layer groups are licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/){rel=""external""}, with an additional license grant enabling commercial use and remixing with Stadia Maps’ vector tiles by paid subscribers. The design of the Stamen MapLibre styles is released under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/){rel=""external""}. ### [Stamen Watercolor](https://github.com/stamen/watercolor){rel=""external""} The raster map tiles served from Stadia Maps network after July 31, 2023 are subject to our standard Terms of Service. The original tiles served from the Stamen CDN and the [Smithsonian collection](https://watercolormaps.collection.cooperhewitt.org/){rel=""external""} are licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/){rel=""external""}. The OpenStreetMap data used in the generation of Stamen Watercolor tiles is licensed under [CC BY-SA 2.0](https://creativecommons.org/licenses/by-sa/2.0/){rel=""external""}. The code for generating the Stamen Watercolor map tiles is licensed under the [ISC license](https://www.tldrlegal.com/license/isc-license){rel=""external""}. ### [Google Noto Fonts](https://www.google.com/get/noto/){rel=""external""} Fonts released under the [SIL Open Font License, Version 1.1](https://openfontlicense.org/){rel=""external""}. ### [Open Sans Font](https://fonts.google.com/specimen/Open+Sans){rel=""external""} Font released under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0){rel=""external""}. ### [Seoul Typeface](https://english.seoul.go.kr/get-to-know-us/city-hall/seoul-symbols/5-fonts/){rel=""external""} Fonts released with a permissive license, provided that the fonts are not distributed in exchange for money or any other commercial acts. ### [OpenMapTiles](https://github.com/openmaptiles/openmaptiles){rel=""external""} OpenMapTiles code is released under the [BSD 3-Clause License](https://www.tldrlegal.com/license/bsd-3-clause-license-revised){rel=""external""}. OpenMapTiles design released under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/){rel=""external""}. [More Info](https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md){rel=""external""} ## Software ### [MapLibre GL JS](https://github.com/maplibre/maplibre-gl-js){rel=""external""} MapLibre GL JS is released under the [BSD 3-Clause License](https://www.tldrlegal.com/license/bsd-3-clause-license-revised){rel=""external""}. [More Info](https://github.com/maplibre/maplibre-gl-js/blob/main/LICENSE.txt){rel=""external""} ### [Leaflet](https://github.com/maplibre/maplibre-gl-js){rel=""external""} Leaflet is released under the [BSD 2-Clause License](https://www.tldrlegal.com/license/bsd-2-clause-license-freebsd){rel=""external""}. [More Info](https://github.com/Leaflet/Leaflet/blob/main/LICENSE){rel=""external""} ### [Valhalla](https://github.com/valhalla/valhalla){rel=""external""} The Valhalla routing engine is released under the [MIT License](https://www.tldrlegal.com/license/mit-license){rel=""external""}. [More Info](https://github.com/valhalla/valhalla/blob/master/COPYING){rel=""external""} ### [Pelias](https://github.com/pelias/pelias){rel=""external""} The Pelias geocoder is released under the [MIT License](https://www.tldrlegal.com/license/mit-license){rel=""external""}. [More Info](https://github.com/pelias/pelias/blob/master/LICENSE){rel=""external""} ### [Address Formatting Templates from OpenCage](https://github.com/OpenCageData/address-formatting){rel=""external""} Address templates are released under the [MIT License](https://www.tldrlegal.com/license/mit-license){rel=""external""}. [More Info](https://github.com/OpenCageData/address-formatting/blob/master/LICENSE.txt){rel=""external""} # Stadia Maps Changelog ## Changelog Frequent, short updates on improvements and changes. ### 2024-06-03 We've released a few updates to our APIs: - Added localized timestamps in several standard formats to the [time zone APIs](https://stadiamaps.com/products/geospatial-apis). - Released new versions of our [SDKs](https://docs.stadiamaps.com/sdks/overview/){rel=""external""}. ### 2024-05-19 - This month's geocoding update is big enough to warrant a mention: Approximately 5 million new POIs from Foursquare OS placesnow match our quality filters. We've also significantly improved our deduplication of similar results for East Asian languages and amusing cases of unicode abuse [like this one](https://ianwwagner.com/til/unicode-normalization-forms){rel=""external""}. ### 2024-04-19 We significantly improved several key aspects of the [autocomplete API](https://stadiamaps.com/products/geocoding-search/autocomplete-search/): - *More* relevant results for focused searches, especially when searching for dense chains like 7-Eleven or Starbucks. - Better selection of the "best" result when we have a similar place from multiple sources. ### 2024-04-01 - Foursquare OS places is no longer in beta! All Geocoding and Autocomplete search endpoints now include millions of new POIs alongside the usual sources. ### 2024-12-04 - Updated our [Geocoding and Autocomplete search](https://stadiamaps.com/products/geocoding-search/geocoding/) database with 27 million new addresses and improved localization support. ### 2024-10-07 - Released a new API for [bulk geocoding](https://stadiamaps.com/blog/quickly-geocode-thousands-of-addresses-with-bulk-geocoding/). ### 2024-08-28 - Released custom markers and POST request support for [Static Map Images](https://stadiamaps.com/products/maps/static-maps/). ### 2024-07-26 - Released an official [SDK for PHP](https://stadiamaps.com/blog/new-sdk-php/). ### 2024-04-12 - Released a major refresh of our [satellite imagery](https://stadiamaps.com/blog/2024-satellite-imagery-refresh/). ### 2024-03-26 - Released a [cacheable static maps endpoint](https://stadiamaps.com/blog/announcing-cacheable-static-map-images/). ### 2024-03-20 - Released version 2.0.0 of our [official SDKs](https://stadiamaps.com/blog/announcing-version-2-of-official-sdks/). ### 2024-03-11 - Introduced weekly synchronized maps and routing data updates. ### 2023-07-17 - Added a new [PoP region](https://stadiamaps.com/infrastructure/) in Paris. ### 2023-07-15 - Maps updated with OSM data from 2023-07-11. ### 2023-07-06 - SDK for Swift released: [SDK for Swift](https://docs.stadiamaps.com/sdks/swift/){rel=""external""}. ### 2023-07-04 - SDKs for Python, TypeScript, and Kotlin announced: [More details](https://stadiamaps.com/blog/new-sdks-and-maplibre-plugin/). ### 2023-05-15 - Maps updated with OSM data from 2023-05-10. ### 2023-05-10 - EU-only endpoints announced: [EU-only endpoints](https://docs.stadiamaps.com/eu-gdpr-endpoints/){rel=""external""}. - Launched support for separate billing emails, email verification, and more dashboard improvements. ### 2023-04-25 - Public beta of Geocoding is now available. [Read More](https://stadiamaps.com/products/geocoding-search/geocoding/). - Official Geocoding & autocomplete search documentation is published: [Docs overview](https://docs.stadiamaps.com/geocoding-search-autocomplete/overview/){rel=""external""}. ### 2023-03-28 - Maps updated with OSM data from 2023-03-20. ### 2023-03-21 - Closed beta of Geocoding is now available. [Read More](https://stadiamaps.com/products/geocoding-search/geocoding/). ### 2023-03-15 - Build-a-Map Tool launched: [Build-a-Map Tool](https://stadiamaps.com/build-a-map/). ### 2023-02-02 - Maps updated with OSM data from 2023-01-28. ### 2023-01-11 - Updated [Pricing](https://stadiamaps.com/pricing/). - Released [Satellite Basemaps](https://stadiamaps.com/products/maps/map-styles/satellite-imagery/). ### 2023-01-09 - Added a new [PoP region](https://stadiamaps.com/infrastructure/) in Sydney. ### 2022-12-16 - Maps updated with OSM data from 2022-12-11. - [Announced map style improvements and house number data](https://stadiamaps.com/blog/map-style-improvements-highway-shields-and-house-numbers/). ### 2022-12-05 - [Announced simplified account-level billing](https://stadiamaps.com/blog/announcing-simplified-account-level-billing/). - Updated TZ APIs to reflect changes in the ICANN [2022g release](https://mm.icann.org/pipermail/tz-announce/2022-November/000076.html){rel=""external""}. ### 2022-11-21 - Added our [Mastodon profile](https://en.osm.town/@stadiamaps){rel=""external""}. ### 2022-11-01 - Maps updated with OSM data from 2022-10-25. - Updated TZ APIs to reflect changes in the ICANN [2022f release](https://mm.icann.org/pipermail/tz-announce/2022-October/000075.html){rel=""external""}. ### 2022-10-19 - Created [Discord server](https://discord.gg/qRBy6qqtdT){rel=""external""}. - Created [Slack channel on OSM US](https://slack.openstreetmap.us/){rel=""external""}. Join `#stadia-maps`. - Improved credit card and account management flow. - Added invoices to dashboard. - Added support for adding Tax IDs directly in the dashboard. ### 2022-10-11 - Added [docs for integrating Stadia Maps into native and multi-platform apps](https://docs.stadiamaps.com/native-multiplatform/overview/){rel=""external""}. - Improved [docs on custom map styles](https://docs.stadiamaps.com/custom-styles/){rel=""external""}. - Added [docs on how to use vector tiles in Leaflet](https://docs.stadiamaps.com/vector/#leaflet){rel=""external""}. - Clarified how the [TZ API](https://docs.stadiamaps.com/tz/){rel=""external""} works in the open ocean. - Improved the look and feel of the “Edit in JSFiddle” button. ### 2022-09-19 - Map data updated to OSM data from 2022-09-14. - Added [Natural Earth Bathymetry tileset](https://docs.stadiamaps.com/tilesets/#natural-earth-bathymetry-tiles){rel=""external""}. ### 2022-08-31 - Added support for Polylines in Static Maps. More information in the [announcement](https://stadiamaps.com/blog/static-maps-with-polylines/) and the [docs](https://docs.stadiamaps.com/static-maps/#lines){rel=""external""}. ### 2022-08-30 - Added the changelog page. ### 2022-08-26 to 2022-08-28 - Completed maintenance and stabilization operations on PoP servers to ensure continued high-reliability. ### 2022-08-15 - Added a new [PoP region](https://stadiamaps.com/infrastructure/) in Mumbai. ### 2022-08-13 - Map data updated to OSM data from 2022-08-06. - Fixed an issue with some seas (e.g., the Baltic Sea) not appearing in the maps. # Stadia Maps Global Infrastructure We've built robust and globally connected infrastructure with one key goal: to provide your users with a consistently fast, reliable, and affordable mapping experience, no matter where they are. Our powerful and thoughtfully designed infrastructure works tirelessly behind the scenes to guarantee that your users enjoy a fast, reliable, cost-effective mapping experience. Simply, [our commitment to you since our first customer in 2016](https://stadiamaps.com/about-stadia/) allow you to focus on what matters most: building amazing applications and delighting your customers. ## Blazing-fast maps, everywhere Speed is crucial. That's why we've invested years in building a foundation to handle any request in milliseconds. Our strategically located global network of {{ datacenterCount }} interconnected data centers ensures that your users receive their maps almost instantly, keeping them engaged and satisfied. ::infrastructure-map{:datacenters="datacenters"} :: ## Reliability you can count on We know that dependable service is essential. We engineer our infrastructure with multiple layers of redundancy and global fault tolerance, so traffic is automatically and seamlessly routed to healthy servers even if there's an issue in one location. Your users experience uninterrupted access to their maps, ensuring a smooth and reliable experience every time. ## Cost-effective performance Our commitment to efficiency extends beyond speed and reliability. By meticulously optimizing our hardware and software, we've created cost-effective infrastructure that allows us to pass significant savings directly on to you. Get top-tier performance and reliability without breaking the bank. ## Built for uninterrupted service We've proactively designed our infrastructure to handle unexpected events. Our mesh network and intelligent health-check systems ensure that your users will never notice if a server or an entire data center experiences a problem. We plan for failure so your users never miss their maps. # Data Processing Addendum **Last updated: March 18, 2026** --- ## PARTIES AND INCORPORATION This Data Processing Addendum ("**DPA**") forms part of the Stadia Maps Terms of Service ("**Agreement**"; available at {rel=""external""}), or other written or electronic agreement between Stadia Maps, Inc., a Delaware corporation ("**Stadia Maps**"), and the entity agreeing to these terms ("**Customer**"), and is effective as of the date Customer accepts this DPA or first accesses the Services, whichever is earlier ("**Effective Date**"). This DPA governs the Processing of Personal Data by Stadia Maps on behalf of Customer in connection with the Services. All capitalized terms not defined in this DPA have the meanings set forth in the Agreement. --- ## 1. DEFINITIONS **"Affiliate"** means an entity that directly or indirectly Controls, is Controlled by, or is under common Control with a party. **"Control"** means ownership, voting, or similar interest representing fifty percent (50%) or more of the total interests of an entity. **"Customer Data"** means Personal Data that Stadia Maps Processes on behalf of Customer as a Processor or Sub-processor in connection with the Services. **"Data Breach"** means a breach of security leading to the accidental or unlawful destruction, loss, alteration, unauthorized disclosure of, or access to, Customer Data. **"Data Protection Laws"** means all applicable laws and regulations relating to the Processing of Personal Data, including: - The EU General Data Protection Regulation 2016/679 ("**EU GDPR**"); - The UK General Data Protection Regulation as incorporated into UK law ("**UK GDPR**") and the UK Data Protection Act 2018; - The Swiss Federal Act on Data Protection ("**Swiss FADP**") as revised September 2023; and - Any other applicable data protection or privacy laws. **"EEA"** means the European Economic Area. **"Personal Data"** means any information relating to an identified or identifiable natural person, as defined under applicable Data Protection Laws. **"Processing"** means any operation performed on Personal Data, including collection, recording, organization, structuring, storage, adaptation, alteration, retrieval, consultation, use, disclosure by transmission, dissemination, alignment, combination, restriction, erasure, or destruction. **"Processor"** means an entity that Processes Personal Data on behalf of a Controller. **"Controller"** means an entity that determines the purposes and means of Processing Personal Data. **"Restricted Transfer"** means a transfer of Personal Data to a country outside the EEA, UK, or Switzerland that has not been recognized as providing an adequate level of data protection. **"Services"** means the products and services provided by Stadia Maps to Customer under the Agreement. **"Standard Contractual Clauses"** or **"SCCs"** means: - For transfers subject to EU GDPR: the standard contractual clauses approved by European Commission Implementing Decision (EU) 2021/914; - For transfers subject to UK GDPR: the International Data Transfer Addendum to the EU Commission Standard Contractual Clauses issued by the UK Information Commissioner ("**UK Addendum**"); and - For transfers subject to Swiss FADP: the SCCs as recognized by the Swiss Federal Data Protection and Information Commissioner. **"Sub-processor"** means any Processor engaged by Stadia Maps to Process Customer Data. --- ## 2. ROLES AND RELATIONSHIP ### 2.1 Determination of Roles The parties acknowledge that Customer's role varies depending on its relationship with the individuals whose Personal Data is Processed: **(a) Customer as Controller.** Where Customer determines the purposes and means of Processing Personal Data (for example, where Customer uses the Services for its own internal business operations), Customer is a Controller and Stadia Maps is a Processor. **(b) Customer as Processor.** Where Customer Processes Personal Data on behalf of a third party (for example, where Customer integrates the Services into applications or services provided to Customer's own customers), Customer is a Processor and Stadia Maps is a Sub-processor. ### 2.2 Stadia Maps as Controller This DPA applies only where Stadia Maps acts as a Processor or Sub-processor on behalf of Customer. Stadia Maps acts as an independent Controller for Personal Data it processes for its own purposes, including account administration, billing, fraud prevention, security monitoring, and legal compliance. ### 2.3 Applicability of Standard Contractual Clauses Modules Where the SCCs apply pursuant to Section 6: - **Module Two** (Controller to Processor) applies where Customer is a Controller; - **Module Three** (Processor to Sub-processor) applies where Customer is a Processor. Customer represents and warrants that it has accurately determined its role and will notify Stadia Maps if its role changes. ### 2.4 Customer Obligations Customer shall: (a) Comply with its obligations under Data Protection Laws, including ensuring it has a lawful basis for Processing and for instructing Stadia Maps to Process Customer Data; (b) Provide all required notices and obtain all necessary consents, authorizations, or legal bases required under Data Protection Laws for Stadia Maps to Process Customer Data as contemplated by this DPA; (c) Ensure that its Processing instructions to Stadia Maps comply with Data Protection Laws; and (d) Where Customer is a Processor, ensure that Customer's Controller has authorized the use of Stadia Maps as a Sub-processor and the transfers contemplated by this DPA. ### 2.5 Stadia Maps Obligations Customer's documented instructions for Processing Customer Data include the Agreement, this DPA, and Customer's use and configuration of the Services within the functionality, defaults, and documented parameters of the Services (including via API parameters, account settings, and support requests). Such instructions do not override Stadia Maps' technical, organizational, or security baselines. Stadia Maps shall: (a) Process Customer Data only in accordance with Customer's documented instructions, unless required to do otherwise by applicable law (in which case Stadia Maps shall notify Customer before Processing unless prohibited by law); (b) Inform Customer without undue delay if, in Stadia Maps' opinion, an instruction infringes applicable Data Protection Laws; (c) Ensure that persons authorized to Process Customer Data are subject to appropriate confidentiality obligations; (d) Implement and maintain appropriate technical and organizational security measures as described in **Annex II**; (e) Comply with the conditions for engaging Sub-processors set forth in Section 4; (f) Assist Customer, taking into account the nature of Processing, in responding to requests from data subjects exercising their rights under Data Protection Laws; (g) Assist Customer in ensuring compliance with obligations relating to security, breach notification, data protection impact assessments, and prior consultation with supervisory authorities, taking into account the nature of Processing and information available to Stadia Maps; (h) At Customer's election, delete or return Customer Data upon termination of the Agreement, subject to Section 8; and (i) Make available to Customer information necessary to demonstrate compliance with this DPA and allow for and contribute to audits as set forth in Section 5.6. Stadia Maps shall provide assistance under subsections (f) and (g) at no additional charge, unless such assistance requires disproportionate effort, in which case Stadia Maps may charge reasonable fees subject to Customer's prior written agreement. This does not limit Stadia Maps' statutory cooperation obligations under applicable Data Protection Laws. --- ## 3. SCOPE OF PROCESSING ### 3.1 Processing Details The subject matter, duration, nature, purpose, types of Personal Data, and categories of data subjects are described in **Annex I**. ### 3.2 Processing Limitations Stadia Maps shall Process Customer Data only for the purposes of providing the Services as described in the Agreement and this DPA. Stadia Maps shall not: (a) Process Customer Data for any purpose other than providing the Services unless required by applicable law; (b) "Sell" or "share" Customer Data as those terms are defined under applicable privacy laws; (c) Retain, use, or disclose Customer Data outside the direct business relationship between Stadia Maps and Customer; or (d) Combine Customer Data with Personal Data received from other sources, except as necessary to provide the Services. ### 3.3 Anonymous Data Nothing in this DPA restricts Stadia Maps from using anonymous data that has been derived from Customer Data and processed such that it cannot reasonably be used to identify any individual, whether directly or indirectly, taking into account all means reasonably likely to be used (in accordance with GDPR Recital 26). For the avoidance of doubt, anonymous data is distinct from pseudonymized data, which remains Personal Data under applicable Data Protection Laws. Stadia Maps shall not attempt to re-identify any such anonymous data. Anonymous data is not Customer Data under this DPA and may be used by Stadia Maps for legitimate business purposes including service improvement, analytics, and benchmarking. --- ## 4. SUB-PROCESSORS ### 4.1 Authorization Customer provides general authorization for Stadia Maps to engage Sub-processors to Process Customer Data, subject to the requirements of this Section 4. ### 4.2 Sub-processor List Stadia Maps maintains a current list of Sub-processors at: **** (the "**Sub-processor List**"). ### 4.3 Sub-processor Changes Stadia Maps shall notify Customer of any new or replacement Sub-processor by updating the Sub-processor List. For Customers with a negotiated Agreement that designates notice contacts, Stadia Maps shall also use commercially reasonable efforts to provide written notice. Unless expressly agreed otherwise in a negotiated Agreement, notice may be provided concurrently with a Sub-processor's engagement. Customer's remedy for an unresolved objection is set forth in Section 4.4. Customer may object within thirty (30) days of (i) receipt of written notice (for Customers with negotiated Agreements that designate notice contacts) or (ii) the Sub-processor List update (for all other Customers), in each case in accordance with Section 4.4. ### 4.4 Objection Right If Customer has a reasonable, documented objection to a Sub-processor based on data protection grounds, Customer shall notify Stadia Maps in writing within the time period specified in Section 4.3. The parties shall discuss Customer's concerns in good faith with a view to achieving resolution. Where Customer raises a reasonable data protection objection, Stadia Maps may, at its discretion, provide an alternative Sub-processor or processing path, or implement appropriate mitigation measures. Stadia Maps shall consider in good faith any reasonable alternative proposed by Customer. Customer acknowledges that certain Sub-processors are essential to provide the Services, and Stadia Maps is not obligated to provide Services that require an objected-to Sub-processor. If the parties cannot resolve the objection within thirty (30) days of Customer's objection notice, and no reasonable alternative exists, Customer may terminate the affected Services without penalty by providing written notice within the following thirty (30) days. ### 4.5 Sub-processor Obligations Stadia Maps shall: (a) Conduct appropriate due diligence on Sub-processors; (b) Enter into written agreements with Sub-processors imposing data protection obligations no less protective than those in this DPA; and (c) Remain liable for the acts and omissions of its Sub-processors to the same extent Stadia Maps would be liable if performing the services directly. --- ## 5. SECURITY ### 5.1 Security Measures Stadia Maps shall implement and maintain appropriate technical and organizational measures designed to protect Customer Data against Data Breaches and to ensure the ongoing confidentiality, integrity, and availability of Processing systems. The current security measures are described in **Annex II**. ### 5.2 Updates to Security Measures Stadia Maps may update its security measures from time to time, provided that such updates do not materially diminish the overall protection of Customer Data. ### 5.3 Customer Responsibilities Customer is responsible for: (a) Securing its account credentials and access to the Services; (b) Ensuring appropriate security of Customer Data in transit to and from the Services; and (c) Implementing appropriate security measures for any systems that interface with the Services. ### 5.4 Data Breach Notification Stadia Maps shall notify Customer without undue delay after becoming aware of a Data Breach affecting Customer Data. Stadia Maps will use reasonable efforts to provide such notification within seventy-two (72) hours where feasible. Such notification shall include, to the extent known: (a) A description of the nature of the Data Breach; (b) The categories and approximate number of data subjects and records concerned; (c) The likely consequences of the Data Breach; and (d) Measures taken or proposed to address the Data Breach. Stadia Maps shall cooperate with Customer and provide information reasonably necessary for Customer to comply with its breach notification obligations under Data Protection Laws. ### 5.5 Confidentiality Stadia Maps shall ensure that any person authorized to Process Customer Data is subject to a duty of confidentiality. ### 5.6 Audits Upon Customer's written request (no more than once per twelve-month period, except as provided below), Stadia Maps shall make available information reasonably necessary to demonstrate compliance with this DPA. Stadia Maps may satisfy its obligations under this Section by providing Customer with access to security documentation, certifications, or completed industry-standard questionnaires made generally available to customers. Customer may, at Customer's expense and upon reasonable notice: (a) Request that Stadia Maps complete a written security questionnaire; and/or (b) Conduct or commission a third-party audit of Stadia Maps' Processing activities, subject to reasonable confidentiality obligations and conducted during normal business hours with minimal disruption to Stadia Maps' operations. The annual frequency limitation shall not restrict audits: (i) following a Data Breach affecting Customer Data; (ii) where required by a supervisory authority or applicable law; or (iii) where reasonably necessary to comply with Customer's or Stadia Maps' obligations under the SCCs. Following a Data Breach, Stadia Maps shall provide affected customers with a written incident report describing the nature of the breach, categories of data affected, and remediation measures. Additional audit requests following a Data Breach are at Customer's expense; provided that, if a Data Breach is determined to have been caused by Stadia Maps' failure to comply with its obligations under this DPA, Stadia Maps shall bear the reasonable costs of one audit limited to the controls reasonably related to the Data Breach, which may be conducted jointly or on behalf of multiple affected Customers. --- ## 6. INTERNATIONAL TRANSFERS ### 6.1 Transfers Generally Stadia Maps may Process Customer Data in any country where Stadia Maps or its Sub-processors maintain operations, subject to appropriate safeguards as required by Data Protection Laws. ### 6.2 Transfer Mechanisms For Restricted Transfers, the parties agree to the following transfer mechanisms: **(a) EU Transfers.** The SCCs (Module Two or Module Three, as applicable per Section 2.3) are incorporated by reference and apply to transfers of Personal Data subject to EU GDPR to countries not recognized by the European Commission as providing adequate protection. For purposes of the SCCs: - Annex I to this DPA serves as Annex I to the SCCs; - Annex II to this DPA serves as Annex II to the SCCs; - The Sub-processor List serves as Annex III to the SCCs; - The optional docking clause (Clause 7) applies; - For Module Two, Option 2 of Clause 9(a) applies, with a notice period of 30 days; - For Module Three, Option 2 of Clause 9(a) applies, with a notice period of 30 days; - The optional redress clause (Clause 11) does not apply; - The governing law is that of the EU Member State in which Customer (as data exporter) is established; if Customer is not established in an EU Member State, the governing law is that of Ireland (Clause 17); - Disputes shall be resolved by the courts of the EU Member State whose law governs pursuant to the preceding clause (Clause 18). **(b) UK Transfers.** The UK Addendum is incorporated by reference and applies to transfers of Personal Data subject to UK GDPR. For purposes of the UK Addendum: - Table 1: The parties' details are as set forth in Annex I; - Table 2: The version of the Approved EU SCCs incorporated is as set forth in Section 6.2(a); - Table 3: Annex I, II, and the Sub-processor List to this DPA apply; - Table 4: Neither party may terminate the UK Addendum as set out in Section 19 of the UK Addendum; - The governing law is that of England and Wales. **(c) Swiss Transfers.** The SCCs apply to transfers of Personal Data subject to Swiss FADP, with the following modifications: - References to "Regulation (EU) 2016/679" shall be interpreted as references to the Swiss FADP; - References to "EU," "Union," or "Member State" shall not be interpreted to exclude data subjects in Switzerland; - The competent supervisory authority is the Swiss Federal Data Protection and Information Commissioner; - The governing law and jurisdiction is Switzerland. ### 6.3 Transfer Impact Assessment The parties acknowledge that, in agreeing to the transfer mechanisms set forth in this Section 6, they have considered the nature of the transfers, the laws of the destination country (including regarding government access to data), and the safeguards implemented pursuant to this DPA. The parties shall cooperate in good faith to implement supplemental measures if required by applicable law, regulatory guidance, or supervisory authority direction. ### 6.4 Alternative Transfer Mechanisms If an alternative lawful transfer mechanism becomes available (such as the EU-US Data Privacy Framework or any successor adequacy decision covering the United States), Stadia Maps may rely on such mechanism in lieu of or in addition to the mechanisms specified above. --- ## 7. US STATE PRIVACY LAWS ### 7.1 Applicability This Section 7 applies to the extent that US state privacy laws, including the California Consumer Privacy Act as amended by the California Privacy Rights Act ("**CCPA**"), the Virginia Consumer Data Protection Act, the Colorado Privacy Act, and other similar state laws (collectively, "**US Privacy Laws**"), apply to Stadia Maps' Processing of Customer Data. ### 7.2 Processor Obligations To the extent Stadia Maps Processes Customer Data subject to US Privacy Laws as a "service provider," "processor," or equivalent role: (a) Stadia Maps shall not sell or share (as those terms are defined under applicable US Privacy Laws) Customer Data; (b) Stadia Maps shall not retain, use, or disclose Customer Data for any purpose other than providing the Services as specified in the Agreement, or as otherwise permitted by applicable US Privacy Laws; (c) Stadia Maps shall not retain, use, or disclose Customer Data outside of the direct business relationship between Stadia Maps and Customer, except as permitted by applicable US Privacy Laws; (d) Stadia Maps shall not combine Customer Data with personal information received from other sources or collected from Stadia Maps' own interactions with individuals, except as permitted by applicable US Privacy Laws to perform the Services; (e) Stadia Maps shall comply with applicable obligations under US Privacy Laws and provide the same level of privacy protection as required by such laws; and (f) Stadia Maps shall notify Customer if it determines that it can no longer meet its obligations under applicable US Privacy Laws. ### 7.3 Assistance with Consumer Rights Stadia Maps shall provide reasonable assistance to Customer in responding to verifiable consumer requests to exercise rights under US Privacy Laws, taking into account the nature of the Processing and the information available to Stadia Maps. ### 7.4 Certification Stadia Maps certifies that it understands the restrictions in this Section 7 and will comply with them. --- ## 8. DATA RETENTION AND DELETION ### 8.1 During the Agreement Stadia Maps shall retain Customer Data only for as long as necessary to provide the Services. ### 8.2 Upon Termination Upon termination or expiration of the Agreement, Stadia Maps shall, at Customer's election and written request made within thirty (30) days of termination: (a) Return Customer Data to Customer in a commonly used format; or (b) Delete Customer Data. If Customer makes no election within thirty (30) days, Stadia Maps shall delete Customer Data. ### 8.3 Exceptions The deletion or return obligations do not apply to the extent Stadia Maps is required to retain Customer Data by applicable law, provided that Stadia Maps: (a) Maintains the confidentiality of such retained Customer Data; (b) Processes such data only as required by applicable law; and (c) Deletes such data when the retention obligation expires. Customer Data contained in backup or archival systems shall be deleted in accordance with Stadia Maps' standard backup retention schedules, provided that such data remains protected by the security measures in this DPA and is not actively processed. ### 8.4 Certification Upon Customer's written request, Stadia Maps shall certify in writing that it has complied with the deletion requirements of this Section 8. --- ## 9. GENERAL PROVISIONS ### 9.1 Order of Precedence In the event of any conflict between this DPA and the Agreement, this DPA shall prevail with respect to the Processing of Customer Data. In the event of any conflict between this DPA and the SCCs, the SCCs shall prevail. Where obligations under US Privacy Laws (as defined in Section 7) conflict with non-US Data Protection Laws applicable to the same Processing, the stricter or more protective requirement shall govern. ### 9.2 Limitation of Liability Each party's liability under this DPA is subject to the limitations and exclusions of liability set forth in the Agreement. Any exclusions or limitations of liability in the Agreement that apply to specific categories of liability (such as fraud, willful misconduct, gross negligence, or death or personal injury) shall apply equally under this DPA. Notwithstanding anything to the contrary in the Agreement or this DPA, Stadia Maps shall not be liable for any claim arising from or related to Stadia Maps' acts or omissions to the extent that Stadia Maps was acting in accordance with Customer's documented instructions. Nothing in this DPA limits either party's liability to data subjects under applicable Data Protection Laws, including under GDPR Article 82. ### 9.3 Governing Law This DPA shall be governed by the laws of the State of Delaware (excluding conflict-of-laws principles), except that: (a) The SCCs for EU transfers shall be governed by the laws of the EU Member State in which Customer is established, or Ireland if Customer is not established in an EU Member State, as specified in Section 6.2(a); (b) The UK Addendum shall be governed by the laws of England and Wales as specified in Section 6.2(b); (c) The Swiss transfer provisions shall be governed by Swiss law as specified in Section 6.2(c); and (d) Where otherwise required by Data Protection Laws, the laws of the applicable jurisdiction shall govern. ### 9.4 Survival This DPA shall remain in effect for so long as Stadia Maps Processes Customer Data on behalf of Customer. ### 9.5 Amendments This DPA may be updated by Stadia Maps from time to time to reflect changes in Data Protection Laws or Processing activities. Material changes shall be notified to Customer in accordance with the notice provisions of the Agreement. ### 9.6 Entire DPA This DPA, including its Annexes and the incorporated SCCs, constitutes the entire agreement between the parties regarding the Processing of Customer Data and supersedes any prior data processing agreements between the parties. --- ## ANNEX I: PROCESSING DETAILS ### A. LIST OF PARTIES **Data Exporter (Customer):** | Field | Value | | ------- | ------------------------------------------------------- | | Name | As specified in the Agreement or Customer's account | | Address | As specified in the Agreement or Customer's account | | Contact | As specified in the Agreement or Customer's account | | Role | Controller or Processor (as determined per Section 2.1) | **Data Importer (Stadia Maps):** | Field | Value | | ------- | --------------------------------------------------------------- | | Name | Stadia Maps, Inc. | | Address | 1690 Watertower Place Ste 100 #216, East Lansing, MI 48823, USA | | Contact | | | Role | Processor or Sub-processor (corresponding to Customer's role) | ### B. DESCRIPTION OF TRANSFER | Element | Description | | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Categories of Data Subjects** | End users of Customer's applications or services that integrate with the Services; Customer's employees or contractors who access the Services. | | **Categories of Personal Data** | IP addresses; approximate geographic location (derived from IP address); device identifiers; usage data related to API requests (timestamps, endpoints accessed, request parameters that may contain location data). | | **Sensitive Data** | The Services are not designed or intended to process special categories of data (as defined in Article 9 of GDPR) or other sensitive data. Customer shall avoid transmitting special category data unless strictly necessary. If Customer determines that special category data must be transmitted, Customer shall: (a) ensure an appropriate legal basis and safeguards are in place; and (b) notify Stadia Maps in advance. Stadia Maps may require additional safeguards or contractual terms, or may decline to process such data if appropriate safeguards cannot be implemented. | | **Frequency of Transfer** | Continuous, in connection with Customer's use of the Services. | | **Nature of Processing** | Receipt, routing, and processing of API requests; delivery of mapping, geocoding, routing, and related geographic data services; logging and monitoring for service delivery and security. | | **Purpose of Processing** | To provide the Services as described in the Agreement. | | **Retention Period** | API request and access logs: approximately 7-14 days. Security, audit logs, and backups: retained in accordance with Stadia Maps' internal policies and applicable legal requirements. Stadia Maps may retain data longer where required by law, security investigation, or regulatory obligation. | ### C. COMPETENT SUPERVISORY AUTHORITY For purposes of the SCCs, the competent supervisory authority shall be: - For EU GDPR: The supervisory authority of the EU Member State in which Customer is established, or if Customer is not established in the EU, the supervisory authority of the Member State where Customer's EU representative is located, or where data subjects are located. - For UK GDPR: The UK Information Commissioner's Office. - For Swiss FADP: The Swiss Federal Data Protection and Information Commissioner. --- ## ANNEX II: TECHNICAL AND ORGANIZATIONAL SECURITY MEASURES Stadia Maps implements and maintains the following security measures: ### 1. Access Controls - Authentication measures including secure credential management and multi-factor authentication for administrative access - Role-based access controls limiting access to Customer Data based on job function and need-to-know - Procedures for timely access revocation upon personnel changes ### 2. Network Security - Firewall protection and network segmentation - Encryption of data in transit using industry-standard algorithms - Intrusion detection and prevention systems - DDoS mitigation measures ### 3. Data Security - Encryption of Customer Data at rest using industry-standard algorithms - Secure key management practices ### 4. Infrastructure Security - Use of reputable cloud infrastructure providers with appropriate certifications - Regular security patching and vulnerability management - Secure configuration management ### 5. Monitoring and Incident Response - Security event logging and monitoring - Documented incident response procedures - Regular review of security logs and alerts ### 6. Personnel Security - Security awareness training - Confidentiality obligations in employment agreements ### 7. Business Continuity - Regular data backups - Disaster recovery procedures - Redundant systems for service availability ### 8. Security Assessments - Periodic assessment of security measures - Vulnerability scanning - Remediation of identified security issues --- ## ANNEX III: SUB-PROCESSOR LIST The current list of authorized Sub-processors is maintained at: **** Customer will be notified of changes to this list in accordance with Section 4.3. --- ## ACCEPTANCE This DPA is accepted by Customer through Customer's use of the Services or by executing a written agreement that incorporates this DPA. --- *End of Data Processing Addendum* # Sub-processors **Last updated: May 18, 2026** Stadia Maps uses the following sub-processors to provide our services. This list is maintained in accordance with our [Data Processing Addendum](https://stadiamaps.com/legal/data-processing-addendum/). ## Current Sub-processors | Sub-processor | Location | Processing Activities | | ---------------------------------- | ------------- | ---------------------------------------- | | Akamai Technologies, Inc. (Linode) | Global | Cloud infrastructure hosting | | Fastmail Pty Ltd | Australia | Email services | | Grafana Labs (Raintank, Inc.) | United States | Monitoring and observability | | Help Scout, PBC | United States | Customer support platform | | Sentry (Functional Software, Inc.) | United States | Error tracking and monitoring | | Pipedrive OÜ | Estonia | Customer relationship management | | Notion Labs, Inc. | United States | Internal documentation and collaboration | | Zulip, Inc. | United States | Internal team communication | ## Updates This list is the authoritative source for Stadia Maps' current Sub-processors. Customers are responsible for monitoring this page for changes. Updates to this list constitute notice pursuant to our [Data Processing Addendum](https://stadiamaps.com/legal/data-processing-addendum/). If you have questions or concerns about a Sub-processor, contact us at . # Stadia Maps MCP Server ::advantage-row --- subtitle: Seamlessly embed maps, geocoding, routing, and geospatial context into AI tooling and agent workflows. title: Enhance AI Agents with Real-World Location Intelligence --- Stadia Maps' Model Context Protocol (MCP) server provides **real-time, accurate location data** directly to your AI stack—ensuring your agents understand the world, not just the text. #image ![Claude Demo](https://stadiamaps.com/images/content/claude_demo_360p.gif) :: ::advantage-row --- subtitle: Stadia Maps MCP Server for self-hosting title: Start in 5 Minutes --- Explore the GitHub repo for quickstart guides, examples, and detailed documentation. It's easy to get started! :::stadia-button --- to: https://github.com/stadiamaps/stadiamaps-mcp-server-ts variant: primary --- Explore the MCP Server Repo ::: #image :::div{.content.has-text-left} ```bash bun install export STADIA_MAPS_API_KEY=your_key bun run build bun run start:anthropic-demo ``` ::: :: --- ::advantage-row{title="Fully-Hosted Location API MCP Server"} Professional plan subscribers will soon access a fully hosted server option, allowing you to focus purely on AI development without infrastructure concerns. :::stadia-button --- to: https://mailchi.mp/stadiamaps/mcp-leads-landing variant: primary --- Join the Waitlist ::: :: ::advantage-row{title="Location-Powered AI: Why It Matters"} - **Geospatial Context at Scale:** Equip agents with up-to-date maps, routing, time zones, and place info, enabling accurate responses to location-based queries. - **Smart Interactions:** Directly utilize geocoding, routing, isochrones, static map generation, and place search within your AI workflows. - **TypeScript First:** Fully typed, modular SDK in TypeScript—choose exactly the tools your agents require. :: ::advantage-row --- subtitle: A complete suite of ready-to-integrate services title: Out-of-the-Box Location Tools --- - **Time & Time Zones** – Accurate current time, UTC offset, DST status. - **Geocoding & Place Search** – Address lookup, POIs, and autocomplete. - **Routing & Travel Time** – Precise directions, travel matrices, and isochrones. - **Map Imagery** – Generate static maps, overlay routes, and place markers. :: ::advantage-row{title="Developer-Centric Integration"} - **Plug + Play:** Quickly integrate by cloning the repository, adding your Stadia Maps API key, and installing dependencies. - **LLM-Ready Examples:** Demonstrations for Anthropic/Claude integration. - **Modular Prompt & Tool Architecture:** Tailor tools specifically for your AI flows, minimizing unnecessary context. :: # Privacy at Stadia Maps ## We Don’t Track You—Or Your Users Many map and location providers use your API integrations to build behavioral profiles, serve ads, or resell data. We don’t. - No user tracking - No behavioral profiling - No data reselling or ad targeting We only collect the minimal data necessary to operate and keep our services secure. No creepy analytics, fingerprinting, or background tracking. ## Private by Design We built [our architecture](https://stadiamaps.com/infrastructure/) to respect privacy at every level: - No client-side scripts that phone home - No third-party cookies or tracking pixels on any service - No user-identifying headers or geolocation sniffing - Map tiles and API calls are cookie-less, stateless, and anonymous by default Want to go a step further? [Self-host our tiles or cache results with complete control.](https://stadiamaps.com/products/on-prem-embedded/) ## Location APIs Without the Lurking We provide rich location services—maps, routing, search, and more—without harvesting user behavior. - Geocoding and search are query-based, not session-based - Routing and navigation doesn’t store location history - Maps don’t log identifying info When you choose Stadia Maps, **you're not just getting a reliable location service. You get control over your data and, more importantly, your users’ trust.** ### Stadia Maps vs Big Tech Providers | Feature | Stadia Maps | Google Maps | Mapbox | | --------------------------- | ----------- | ----------- | ------- | | Tracks end users? | No | Yes | Yes | | Sells behavioral data? | No | Yes | Yes | | Collects precise location? | No | Yes | Yes | | Uses data for ad targeting? | No | Yes | Yes | | Self-hostable options? | Yes | No | Limited | ## What We Do Collect (and Why) We log only what we need to: - Operate and secure our infrastructure - Prevent abuse and fraud - Debug service issues We never collect or store location data tied to individual users. Our full [Privacy Policy](https://stadiamaps.com/privacy/privacy-policy/) explains it in plain language. ## Respect for Your Users = Respect for You You shouldn’t have to trade user privacy for mapping features. Stadia Maps helps you: - Build trust with your users - Stay compliant with GDPR, CCPA, and other regulations - Avoid entangling your brand with Big Tech ## Private by Default, Customizable by You Whether you’re building a privacy-first app, a regulated enterprise solution, or simply value user trust, Stadia Maps gives you the tools to stay in control. With Stadia Maps, you're always in the driver's seat. - [Read our Privacy Policy](https://stadiamaps.com/privacy/privacy-policy/) - [Explore our Private Location API Guide](https://stadiamaps.com/privacy/private-location-apis-maps/) - [Talk to our team about enterprise or self-hosted options](https://stadiamaps.com/support/) # Privacy Policy **Last updated: May 18, 2026** This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you visit our website, create an account, or use our Services. This Privacy Policy is part of and subject to our [Terms of Service](https://stadiamaps.com/terms-of-service/). Capitalized terms not defined herein have the meanings set forth in the Terms of Service. For information about how we process data on behalf of our business Customers (as a processor or sub-processor), please see our [Data Processing Addendum](https://stadiamaps.com/legal/data-processing-addendum/). --- ## 1. Information We Collect ### Information You Provide We collect information you voluntarily provide, including: - **Account information:** name, email address, company name, and password when you create an account - **Billing information:** payment card details and billing address when you purchase services (processed by our payment provider) - **Communications:** information you provide when you contact us for support or other inquiries - **Newsletter subscriptions:** email address if you subscribe to our mailing list ### Information Collected Automatically When you visit our website or use our dashboard, we automatically collect: - **Usage data:** pages visited, features used, and actions taken - **Device information:** browser type, operating system, and device identifiers - **Log data:** IP address, access times, and referring URLs - **Analytics data:** aggregated information about website usage via privacy-focused analytics; IP addresses are anonymized within our analytics system and are not stored in full ### Cookies We use first-party, strictly necessary cookies on our client dashboard for authentication and session management. Our marketing website and API endpoints do not use cookies; end users of applications built with our services never receive cookies from Stadia Maps. We do not use third-party tracking cookies, advertising cookies, or cross-site tracking technologies on any of our properties. --- ## 2. How We Use Your Information We use your information for the following purposes: - **Provide services:** to create and manage your account, process payments, and deliver our services - **Communicate:** to respond to inquiries, send service-related notices, and provide customer support - **Improve:** to analyze usage patterns and improve our website and services - **Security:** to detect, prevent, and address fraud, abuse, and security issues - **Legal compliance:** to comply with applicable laws and legal obligations - **Newsletter:** to send our newsletter if you subscribe --- ## 3. Legal Basis for Processing (EEA, UK, and Swiss Users) If you are in the European Economic Area, United Kingdom, or Switzerland, our legal basis for processing your information depends on the type of data and context: | Purpose | Legal Basis | | ----------------------------------------- | --------------------------------------------- | | Providing services and account management | Performance of contract | | Processing payments | Performance of contract | | Customer support | Performance of contract / Legitimate interest | | Security and fraud prevention | Legitimate interest | | Website analytics | Legitimate interest | | Newsletter | Consent | | Legal compliance | Legal obligation | --- ## 4. How We Share Your Information We do not sell, rent, or trade your personal information. We share your information only with the following categories of recipients: ### Service Providers We use third-party service providers to help operate our business. Data sharing with these providers is limited and purpose-specific; not all providers receive all categories of personal data. | Provider | Purpose | Location | | ---------------------------------- | --------------------------------- | -------------- | | Stripe, Inc. | Payment processing | United States | | Fastmail Pty Ltd | Email communications | Australia | | Pipedrive OÜ | Customer relationship management | Estonia | | Xero Limited | Invoicing and accounting | New Zealand | | Matomo (InnoCraft Ltd) | Website analytics (IP anonymized) | European Union | | Sentry (Functional Software, Inc.) | Error tracking | United States | | Mailchimp (Intuit Inc.) | Email newsletter | United States | | Postmark (ActiveCampaign, LLC) | Transactional email | United States | | Notion Labs, Inc. | Internal documentation | United States | | Zulip, Inc. | Internal communication | United States | | Help Scout, PBC | Customer support platform | United States | ### Legal Requirements We may disclose your information if required by law or in good faith belief that such action is necessary to: - Comply with legal obligations or respond to lawful requests - Protect and defend our rights or property - Prevent or investigate possible wrongdoing - Protect the safety of our users or the public ### Business Transfers If we are involved in a merger, acquisition, or sale of assets, your information may be transferred as part of that transaction, subject to applicable data protection laws. --- ## 5. International Data Transfers Stadia Maps is based in the United States. If you are located outside the United States, your information may be transferred to and processed in the United States and other countries where our service providers operate. For transfers from the EEA, UK, or Switzerland, we rely on: - Standard Contractual Clauses approved by the European Commission - Other lawful transfer mechanisms as appropriate Some of our service providers may independently rely on the EU-US Data Privacy Framework or other adequacy mechanisms for transfers they receive. --- ## 6. Data Retention We retain your information for as long as your account is active or as needed to provide services. After account closure, we retain information as follows: - **Account data:** deleted within 30 days of account closure, except as required for legal or security purposes - **Billing records:** retained as required by tax and accounting laws and our service providers' retention policies - **Server logs:** approximately 7-14 days - **Analytics data:** aggregated and anonymized; retained indefinitely --- ## 7. Your Rights Depending on your location, you may have the following rights: - **Access:** request a copy of the personal information we hold about you - **Correction:** request correction of inaccurate information - **Deletion:** request deletion of your personal information - **Portability:** request your data in a portable format - **Objection:** object to processing based on legitimate interests - **Restriction:** request restriction of processing - **Withdraw consent:** withdraw consent for processing based on consent (such as our newsletter) To exercise these rights, contact us at . We will respond within 30 days (or sooner if required by applicable law). ### EEA, UK, and Swiss Residents If you are in the EEA, UK, or Switzerland, you also have the right to lodge a complaint with your local data protection supervisory authority if you believe we have not complied with applicable data protection laws. ### California Residents If you are a California resident, you have rights under the California Consumer Privacy Act (CCPA) as amended by the California Privacy Rights Act (CPRA), including the right to know what personal information we collect, the right to delete, the right to correct, and the right to opt out of the sale or sharing of personal information. We do not sell or share personal information for cross-context behavioral advertising. We do not use sensitive personal information for purposes other than providing our services. ### Other US States Residents of other US states may have similar rights under applicable state privacy laws. To exercise any privacy rights, contact us at . --- ## 8. Children's Privacy You must be at least 13 years old to create an account. If you are under 18, a parent or legal guardian must create the account on your behalf and agree to this Privacy Policy and our Terms of Service. We do not knowingly collect personal information from children under 13. If we become aware that we have collected information from a child under 13, we will delete it promptly. If you believe we have collected information from a child under 13, please contact us. --- ## 9. Security We implement appropriate technical and organizational measures to protect your information, including encryption in transit and at rest, access controls, and regular security assessments. While no system is completely immune to risk, we continuously work to protect your data. --- ## 10. Third-Party Links Our website may contain links to third-party websites. We are not responsible for the privacy practices of those websites. We encourage you to read their privacy policies. --- ## 11. Changes to This Policy We may update this Privacy Policy from time to time. For material changes, we will use reasonable efforts to provide advance notice by email (using the address associated with your account) or by posting a prominent notice on our website before the change becomes effective. We will update the "Last updated" date at the top of this policy. Your continued use of our services after the effective date constitutes acceptance of the updated policy. --- ## 12. Contact Us If you have questions about this Privacy Policy or our privacy practices, contact us at: **Email:** **Mail:** Stadia Maps, Inc. 1690 Watertower Place Ste 100 #216 East Lansing, MI 48823 United States --- ## 13. Data Processing for Business Customers If you are a business customer using our APIs, we process data on your behalf as a processor or sub-processor. That relationship is governed by our [Data Processing Addendum](https://stadiamaps.com/legal/data-processing-addendum/), not this Privacy Policy. # Stadia Maps Terms of Service **Last updated: March 18, 2026** PLEASE READ THE FOLLOWING TERMS OF SERVICE AGREEMENT CAREFULLY. BY ACCESSING OR USING OUR SITES AND OUR SERVICES, YOU HEREBY AGREE TO BE BOUND BY THE TERMS AND ALL TERMS INCORPORATED HEREIN BY REFERENCE. IT IS THE RESPONSIBILITY OF YOU, THE USER, CUSTOMER, OR PROSPECTIVE CUSTOMER TO READ THE TERMS AND CONDITIONS BEFORE PROCEEDING TO USE THIS SITE. IF YOU DO NOT EXPRESSLY AGREE TO ALL OF THE TERMS AND CONDITIONS, THEN PLEASE DO NOT ACCESS OR USE OUR SITES OR OUR SERVICES. --- ## 1. DEFINITIONS The following definitions apply throughout this Agreement and any documents incorporated by reference, unless otherwise specified: **"Agreement"** means this Terms of Service, including all documents incorporated by reference (such as the Privacy Policy and Data Processing Addendum). **"Content"** means any text, images, data, software, messages, tags, shapefiles, or other materials uploaded, posted, transmitted, or otherwise made available through the Services. **"Customer Data"** means Personal Data that Stadia Maps Processes on behalf of Customer as a Processor or Sub-processor in connection with the Services. **"Data Processing Addendum"** or **"DPA"** means the data processing addendum available at {rel=""external""}, which governs the Processing of Personal Data by Stadia Maps on behalf of Customer. **"Effective Date"** means the date on which you first access or use the Services, or accept this Agreement, whichever is earlier. **"Member"** means a User who has registered for an account with Stadia Maps. **"Personal Data"** means any information relating to an identified or identifiable natural person, as defined under applicable data protection laws. **"Privacy Policy"** means the Stadia Maps privacy policy available at {rel=""external""}, which describes how Stadia Maps collects, uses, and discloses information. **"Processing"** (and its variants) means any operation performed on Personal Data, including collection, recording, organization, storage, adaptation, alteration, retrieval, use, disclosure, or destruction. **"Services"** means the products and services provided by Stadia Maps, including but not limited to map tiles, geocoding, routing, and related geographic data services, whether accessed via the Site, APIs, or other means. **"Site"** means stadiamaps.com and any related Stadia Maps websites. **"Stadia Maps," "we," "us,"** or **"our"** means Stadia Maps, Inc., a Delaware corporation, located at 1690 Watertower Place Ste 100 #216, East Lansing, MI 48823, USA. **"User"** means any individual or entity that accesses or uses the Site or Services. **"You," "your,"** or **"Customer"** means the User or Member agreeing to this Agreement, whether an individual or an entity. --- ## 2. ACCEPTANCE OF TERMS This Agreement is a legally binding agreement that shall govern the relationship with our Customers and others which may interact or interface with Stadia Maps in association with the use of the Site and Services. --- ## 3. PRIVACY Your use of the Services is subject to our [Privacy Policy](https://stadiamaps.com/privacy/privacy-policy/), which is incorporated by reference into this Agreement. By using our Services, you consent to the collection and use of information as described in our Privacy Policy. --- ## 4. DATA PROCESSING To the extent Stadia Maps Processes Personal Data on your behalf in connection with the Services, the [Data Processing Addendum](https://stadiamaps.com/legal/data-processing-addendum/) is incorporated by reference into this Agreement. --- ## 5. DESCRIPTION OF WEBSITE SERVICES OFFERED Stadia Maps designs and hosts vector and raster map tiles, indexes and serves various kinds of geospatial data, and generates static map images. You acknowledge and agree that the Services provided and made available through our website and applications, which may include mobile applications made available on various platforms, are the sole property of Stadia Maps. At its discretion, Stadia Maps may offer additional Services and/or products, or update, modify or revise any current content and Services, and this Agreement shall apply to any and all additional Services and/or products and any and all updated, modified, or revised Services unless otherwise stipulated. Stadia Maps does hereby reserve the right to cancel and cease offering any of the aforementioned Services and/or products. You acknowledge, accept, and agree that Stadia Maps shall not be held liable for any such updates, modifications, revisions, suspensions, or discontinuance of our Services and/or products. Your continued use of the Services provided, after such posting of any updates, changes, and/or modifications shall constitute your acceptance of such updates, changes, and/or modifications, and as such, frequent review of this Agreement and any and all applicable terms and policies should be made by you to ensure you are aware of all terms and policies currently in effect. Should you not agree to the updated, revised, or modified terms, you must stop using the provided Services forthwith. Furthermore, you understand, acknowledge and agree that the Services offered shall be provided "AS IS" and as such Stadia Maps shall not assume any responsibility or obligation for the timeliness, missed delivery, deletion, and/or any failure to store user content, communication, or personalization settings. --- ## 6. REGISTRATION To register and become a Member, you must be at least 13 years of age. If you are between 13 and 18 years of age, a parent or legal guardian must create the account on your behalf and agree to this Agreement. We do not knowingly collect personal information from children under 13. Parents or legal guardians who create accounts are responsible for their minor's use of the Services and compliance with this Agreement. In addition, you must be in good standing and not an individual that has been previously barred from receiving Stadia Maps' Services under the laws and statutes of the United States or other applicable jurisdiction. When you register, Stadia Maps may collect information such as your name, e-mail address, birth date, gender, and address. You can edit your account information at any time. Once you register with Stadia Maps and sign in to our Services, you are no longer anonymous to us. Furthermore, the registering party hereby acknowledges, understands, and agrees to: - furnish factual, correct, current, and complete information with regards to yourself as may be requested by the data registration process, and - maintain and promptly update your registration and profile information in an effort to maintain accuracy and completeness at all times. If anyone knowingly provides any information of a false, untrue, inaccurate, or incomplete nature, Stadia Maps will have sufficient grounds and rights to suspend or terminate the Member in violation of this aspect of the Agreement, and as such refuse any and all current or future use of Stadia Maps Services, or any portion thereof. --- ## 7. MEMBER ACCOUNT, USERNAME, PASSWORD, AND SECURITY When you set up an account, you are the sole authorized user of your account, unless you specifically grant access to another person on your behalf. You shall be responsible for maintaining the secrecy and confidentiality of your password and for all activities that transpire on or within your account. It is your responsibility for any act or omission of any user(s) that access your account information that, if undertaken by you, would be deemed a violation of this Agreement. It shall be your responsibility to notify Stadia Maps immediately if you notice any unauthorized access or use of your account or password or any other breach of security. Stadia Maps shall not be held liable for any loss and/or damage arising from any failure to comply with this term and/or condition of this Agreement. --- ## 8. CONDUCT AND ACCEPTABLE USE Our Services contain user-generated data from a variety of sources. As a User, you herein acknowledge, understand, and agree that all Content, whether it is publicly or privately posted and/or transmitted, is the expressed sole responsibility of the individual from whom the Content originated. In short, this means that you are solely responsible for any and all Content posted, uploaded, emailed, transmitted, or otherwise made available by way of the Services, and as such, we do not guarantee the accuracy, integrity, or quality of such Content. It is expressly understood that by use of our Services, you may be exposed to Content including, but not limited to, any errors or omissions in any Content posted, and/or any loss or damage of any kind incurred as a result of the use of any Content posted, emailed, transmitted, or otherwise made available by Stadia Maps. Stadia Maps herein reserves the right to access, preserve, and/or disclose Member account information and/or Content if it is requested to do so by law or in good faith belief that any such action is deemed reasonably necessary for: - compliance with any legal process; - enforcement of this Agreement; - responding to any claim that therein contained Content is in violation of the rights of any third party; - responding to requests for customer service; or - protecting the rights, property, or the personal safety of Stadia Maps, its visitors, Users, and Members, including the general public. Stadia Maps herein reserves the right to include the use of security components that may permit digital information or material to be protected, and that such use of information and/or material is subject to usage guidelines and regulations established by Stadia Maps or any other content providers supplying content services to Stadia Maps. You are hereby prohibited from making any attempt to override or circumvent any of the embedded usage rules in our Services. Furthermore, unauthorized reproduction, publication, distribution, or exhibition of any information or materials supplied by our Services, despite whether done so in whole or in part, is expressly prohibited. Stadia Maps herein reserves the right to charge or invoice, suspend, or terminate a Member who exceeds their usage limits. In the event that the Member's behavior is not abusive or adversely affecting our ability to serve other Members, Stadia Maps will give the Member at least a 30 day notice via their registered email so they can rectify the situation by upgrading their plan, reducing usage, or terminating their membership. Stadia Maps reserves the right to charge/invoice the Customer at the appropriate rate after 30 days. In the event that the Member's behavior is abusive or adversely affecting our ability to serve other Members, Stadia Maps reserves the right to limit or terminate the Member's account. Furthermore, you herein agree not to make use of Stadia Maps' Services in any of the following ways: ::div{.lower-alpha-list} 1. disrupting the normal flow of communication, or otherwise acting in any manner that would negatively affect other Users' ability to participate in any real time interactions; 2. interfering with or disrupting any Stadia Maps Services, servers, and/or networks that may be connected or related to our website, including, but not limited to, the use of any device software and/or routine to bypass the robot exclusion headers; 3. obscuring or attempting to obscure any attributions, copyrights, or other legal notices that appear on images or other data returned from our servers, or failing to include a required attribution or legal notice in the course of using our data; 4. bulk downloading of data, except for the purpose of caching small amounts of data for offline use in a mobile application, not to exceed 100MB cached at a time per device; 5. proxying or caching access to our Services in any way, except for the above exception of limited downloads for offline use in a mobile application, use of the cacheable static maps endpoint as defined in the section Cacheable Static Maps, or standard client-side caching (server-side caching is prohibited) for performance reasons provided that the cache is local to the client device and the data is not retained for longer than the HTTP caching headers, or 7 days in the case that a header is not returned; 6. creating derivative databases by systematically extracting, reutilizing, or compiling substantial portions of data from our Services; 7. permanently storing results for future use (e.g., as a database column), in part or in whole, from the Stadia Maps Geocoding APIs without an active Standard, Professional, or Enterprise subscription with appropriate permissions; 8. copying or reusing styles or other design elements without express permission of the copyright holder; 9. using screenshots of maps or data, or using any other method to circumvent access controls and/or usage limits; 10. benchmarking any of our Services against competitor services or using any of our data to improve competing map, routing, or traffic services without explicit written permission from us; 11. attempting to use the Services for your site, application, or in conjunction with any commercial purpose without an active, paid (non-free) subscription for your site, application, or other property; 12. attempting to use the Services in print, film, television, or other medium in which data is not typically requested for each user interaction with the content or Services, unless the project use is strictly non-commercial, or we grant an explicit commercial license; 13. spoofing or attempting to spoof an HTTP referer or origin header in a web application, or sending a referer or origin header in a mobile application so as to make data requests appear to come from another domain or circumvent access control, content protection, or logging measures; 14. sharing a subscription, account, API keys, or any other access control constructs across multiple products, websites, apps, etc. except in the case of a suite of similar applications created and sold by the account holder (absolutely no sharing of subscriptions among different companies and/or individuals); 15. using an account in a manner that violates any of its restrictions, including but not limited to using a free account for commercial purposes; 16. uploading, posting, emailing, transmitting, or otherwise making available any Content that shall be deemed unlawful, harmful, threatening, abusive, harassing, tortious, defamatory, vulgar, obscene, libelous, or invasive of another's privacy or which is hateful, and/or racially, ethnically, or otherwise objectionable; 17. impersonating any individual or entity, including, but not limited to, any Stadia Maps officials, forum leaders, guides, or hosts or falsely stating or otherwise misrepresenting any affiliation with an individual or entity; 18. uploading, posting, emailing, transmitting, or otherwise offering any such Content that may infringe upon any patent, copyright, trademark, or any other proprietary or intellectual rights of any other party; 19. uploading, posting, emailing, transmitting, or otherwise offering any Content that you do not personally have any right to offer pursuant to any law or in accordance with any contractual or fiduciary relationship; 20. uploading, posting, emailing, transmitting, or otherwise offering any unsolicited or unauthorized advertising, promotional flyers, "junk mail," "spam," or any other form of solicitation, except in any such areas that may have been designated for such purpose; 21. uploading, posting, emailing, transmitting, or otherwise offering any source that may contain a software virus or other computer code, any files and/or programs which have been designed to interfere, destroy and/or limit the operation of any computer software, hardware, or telecommunication equipment; 22. collecting or storing of any Personal Data relating to any other Member or User in connection with the prohibited conduct and/or activities which have been set forth in the aforementioned paragraphs. :: ### 8.1 Right to Refuse Stadia Maps herein reserves the right to pre-screen, refuse, and/or delete any Content currently available through our Services. In addition, we reserve the right to remove and/or delete any such Content that would violate this Agreement or which would otherwise be considered offensive to other visitors, Users, and/or Members. --- ## 9. CAUTIONS FOR GLOBAL USE AND EXPORT AND IMPORT COMPLIANCE Due to the global nature of the internet, through the use of our network you hereby agree to comply with all local rules relating to online conduct and that which is considered acceptable Content. Uploading, posting, and/or transferring of software, technology, and other technical data may be subject to the export and import laws of the United States and possibly other countries. Through the use of our network, you thus agree to comply with all applicable export and import laws, statutes, and regulations, including, but not limited to, the Export Administration Regulations ({rel=""external""}), as well as the sanctions control program of the United States ({rel=""external""}). Furthermore, you state and pledge that you: - are not on the list of prohibited individuals which may be identified on any government export exclusion report ({rel=""external""}) nor a member of any other government which may be part of an export-prohibited country identified in applicable export and import laws and regulations; - agree not to transfer any software, technology, or any other technical data through the use of our network Services to any export-prohibited country; - agree not to use our website network Services for any military, nuclear, missile, chemical, or biological weaponry end uses that would be a violation of the U.S. export laws; - agree not to post, transfer nor upload any software, technology, or any other technical data which would be in violation of the U.S. or other applicable export and/or import laws; - agree not to export map data covering China from within China, or map data covering South Korea from within South Korea; and - agree not to use Canadian postal codes obtained through our Services for bulk mailing purposes or internet postal code lookup services. --- ## 10. CONTENT PLACED OR MADE AVAILABLE FOR COMPANY SERVICES Stadia Maps shall not lay claim to ownership of any Content submitted by any visitor, Member, or User, nor make such Content available for inclusion on our website Services. Therefore, you hereby grant and allow for Stadia Maps the below listed worldwide, royalty-free, and non-exclusive licenses, as applicable: - The Content submitted or made available for inclusion on the publicly accessible areas of Stadia Maps' sites, the license provided to permit to use, distribute, reproduce, modify, adapt, publicly perform, and/or publicly display said Content on our network Services is for the sole purpose of providing and promoting the specific area to which this Content was placed and/or made available for viewing. This license shall be available so long as you are a Member of Stadia Maps' sites, and shall terminate at such time when you elect to discontinue your membership. - Photos, audio, video, and/or graphics submitted or made available for inclusion on the publicly accessible areas of Stadia Maps' sites, the license provided to permit to use, distribute, reproduce, modify, adapt, publicly perform, and/or publicly display said Content on our network Services are for the sole purpose of providing and promoting the specific area in which this Content was placed and/or made available for viewing. This license shall be available so long as you are a Member of Stadia Maps' sites and shall terminate at such time when you elect to discontinue your membership. - For any other Content submitted or made available for inclusion on the publicly accessible areas of Stadia Maps' sites, the continuous, binding, and completely sub-licensable license which is meant to permit to use, distribute, reproduce, modify, adapt, publish, translate, publicly perform, and/or publicly display said Content, whether in whole or in part, and the incorporation of any such Content into other works in any arrangement or medium current used or later developed. Those areas which may be deemed "publicly accessible" areas of Stadia Maps' sites are those such areas of our network properties which are meant to be available to the general public, and which would include any data intended to be accessible by any User with a valid account and/or subscription plan, whether or not access is otherwise restricted. --- ## 11. CONTRIBUTIONS TO COMPANY WEBSITE Stadia Maps may provide an area for our Users and Members to contribute feedback to our website. When you submit ideas, documents, suggestions and/or proposals ("**Contributions**") to our site, you acknowledge and agree that: - your Contributions do not contain any type of confidential or proprietary information; - Stadia Maps shall not be liable or under any obligation to ensure or maintain confidentiality, expressed or implied, related to any Contributions; - Stadia Maps shall be entitled to make use of and/or disclose any such Contributions in any such manner as we may see fit; - the contributor's Contributions shall automatically become the sole property of Stadia Maps; and - Stadia Maps is under no obligation to either compensate or provide any form of reimbursement in any manner or nature. --- ## 12. INDEMNITY All Users and/or Members herein agree to insure and hold Stadia Maps, our subsidiaries, affiliates, agents, employees, officers, partners and/or licensors blameless or not liable for any claim or demand, which may include, but is not limited to, reasonable attorney fees made by any third party which may arise from any Content a Member or User of our Site may submit, post, modify, transmit or otherwise make available through our Services, the use of Stadia Maps Services or your connection with these Services, your violations of this Agreement and/or your violation of any such rights of another person. --- ## 13. COMMERCIAL REUSE OF SERVICES You herein agree not to replicate, duplicate, copy, trade, sell, resell nor exploit for any commercial reason any part, use of, or access to Stadia Maps' sites, data, or Services. You may however use our Services as part of your own commercial products with some limitations. You may use our Services in websites, mobile applications, desktop applications, and any other form of electronic media in which requests are typically made for each map view or API request, provided that you maintain an active paid subscription. For other applications, including print, film, television, live streaming, and all other cases in which requests are not typically made for each map view or API request, contact us for licensing details unless your use case is specifically allowed by more specific terms superseding these. Our free tier may only be used for non-commercial or evaluation purposes, including but not limited to development of a proof of concept or a personal site. --- ## 14. MODIFICATIONS Stadia Maps shall reserve the right at any time it may deem fit, to modify, alter and or discontinue, whether temporarily or permanently, our Service, or any part thereof, with or without prior notice. In addition, we shall not be held liable to you or to any third party for any such alteration, modification, suspension, and/or discontinuance of our Services, or any part thereof. --- ## 15. USE AND STORAGE GENERAL PRACTICES You herein acknowledge that Stadia Maps may set up any such practices and/or limits regarding the use of our Services, without limitation of the maximum number of days that any uploaded Content shall be retained by Stadia Maps, the maximum volume or size of any Content that may be sent from or may be received by an account on our Service, the maximum disk space allowable that shall be allocated on Stadia Maps' servers on the Member's behalf, and/or the maximum number of times and/or duration that any Member may access our Services in a given period of time. In addition, you also agree that Stadia Maps has absolutely no responsibility or liability for the removal or failure to maintain storage of any messages and/or other communications or Content maintained or transmitted by our Services. You also herein acknowledge that we reserve the right to delete or remove any account that is no longer active for an extended period of time. Furthermore, Stadia Maps shall reserve the right to modify, alter and/or update these general practices and limits at our discretion. --- ## 16. TERMINATION As a Member, you may cancel or terminate your account, associated email address and/or access to our Services by submitting a cancellation or termination request to . As a Member, you agree that Stadia Maps may, without any prior written notice, immediately suspend, terminate, discontinue, and/or limit your account, any email associated with your account, and access to any of our Services. The cause for such termination, discontinuance, suspension, and/or limitation of access shall include, but is not limited to: - any breach or violation of this Agreement or any other incorporated agreement, regulation, and/or guideline; - by way of requests from law enforcement or any other governmental agencies; - the discontinuance, alteration and/or material modification to our Services, or any part thereof; - unexpected technical or security issues and/or problems; - any extended periods of inactivity; - any engagement by you in any fraudulent or illegal activities; and/or - the nonpayment of any associated fees that may be owed by you in connection with your account Services. Furthermore, you herein agree that any and all terminations, suspensions, discontinuances, and, or limitations of access for cause shall be made at our sole discretion and that we shall not be liable to you or any other third party with regards to the termination of your account, associated email address and/or access to any of our Services. The termination of your account shall include any and/or all of the following: - the removal of any access to all or part of the Services offered within our website(s); - the deletion of your account and any and all related information, files, and any such Content that may be associated with or inside your account, or any part thereof; and - the barring of any further use of all or part of our Services. --- ## 17. LINKS Either Stadia Maps or any third parties may provide links to other websites and/or resources. Thus, you acknowledge and agree that we are not responsible for the availability of any such external sites or resources, and as such, we do not endorse nor are we responsible or liable for any content, products, advertising, or any other materials, on or available from such third party sites or resources. Furthermore, you acknowledge and agree that Stadia Maps shall not be responsible or liable, directly or indirectly, for any such damage or loss which may be a result of, caused or allegedly to be caused by or in connection with the use of or the reliance on any such content, goods, or Services made available on or through any such site or resource. --- ## 18. PROPRIETARY RIGHTS You do hereby acknowledge and agree that Stadia Maps' Services and any essential software that may be used in connection with our Services ("**Software**") may contain proprietary and confidential material that is protected by applicable intellectual property rights and other laws. Furthermore, you herein acknowledge and agree that any Content which may be contained in any advertisements or information presented by and through our Services or by advertisers is protected by copyrights, trademarks, patents or other proprietary rights and laws. Therefore, except for that which is expressly permitted by applicable law or as authorized by Stadia Maps or such applicable licensor, you agree not to alter, modify, lease, rent, loan, sell, distribute, transmit, broadcast, publicly perform, and/or created any plagiaristic works which are based on Stadia Maps Services (e.g., content or software), in whole or part. --- ## 19. WARRANTY DISCLAIMERS YOU HEREIN EXPRESSLY ACKNOWLEDGE AND AGREE THAT: - THE USE OF STADIA MAPS SERVICES AND SOFTWARE ARE AT THE SOLE RISK BY YOU. OUR SERVICES AND SOFTWARE SHALL BE PROVIDED ON AN "AS IS" AND/OR "AS AVAILABLE" BASIS. STADIA MAPS AND OUR SUBSIDIARIES, AFFILIATES, OFFICERS, EMPLOYEES, AGENTS, PARTNERS AND LICENSORS EXPRESSLY DISCLAIM ANY AND ALL WARRANTIES OF ANY KIND WHETHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. - STADIA MAPS AND OUR SUBSIDIARIES, OFFICERS, EMPLOYEES, AGENTS, PARTNERS, AND LICENSORS MAKE NO SUCH WARRANTIES THAT 1. STADIA MAPS SERVICES OR SOFTWARE WILL MEET YOUR REQUIREMENTS; 2. STADIA MAPS SERVICES OR SOFTWARE SHALL BE UNINTERRUPTED, TIMELY, SECURE OR ERROR-FREE; 3. THAT SUCH RESULTS WHICH MAY BE OBTAINED FROM THE USE OF THE STADIA MAPS SERVICES OR SOFTWARE WILL BE ACCURATE OR RELIABLE; 4. QUALITY OF ANY PRODUCTS, SERVICES, ANY INFORMATION, OR OTHER MATERIAL WHICH MAY BE PURCHASED OR OBTAINED BY YOU THROUGH OUR SERVICES OR SOFTWARE WILL MEET YOUR EXPECTATIONS; AND 5. THAT ANY SUCH ERRORS CONTAINED IN THE SOFTWARE SHALL BE CORRECTED. - ANY INFORMATION OR MATERIAL DOWNLOADED OR OTHERWISE OBTAINED BY WAY OF STADIA MAPS SERVICES OR SOFTWARE SHALL BE ACCESSED BY YOUR SOLE DISCRETION AND SOLE RISK, AND AS SUCH YOU SHALL BE SOLELY RESPONSIBLE FOR AND HEREBY WAIVE ANY AND ALL CLAIMS AND CAUSES OF ACTION WITH RESPECT TO ANY DAMAGE TO YOUR COMPUTER AND/OR INTERNET ACCESS, DOWNLOADING AND/OR DISPLAYING, OR FOR ANY LOSS OF DATA THAT COULD RESULT FROM THE DOWNLOAD OF ANY SUCH INFORMATION OR MATERIAL. - NO ADVICE AND/OR INFORMATION, DESPITE WHETHER WRITTEN OR ORAL, THAT MAY BE OBTAINED BY YOU FROM STADIA MAPS OR BY WAY OF OR FROM OUR SERVICES OR SOFTWARE SHALL CREATE ANY WARRANTY NOT EXPRESSLY STATED IN THIS AGREEMENT. - A SMALL PERCENTAGE OF SOME USERS MAY EXPERIENCE SOME DEGREE OF EPILEPTIC SEIZURE WHEN EXPOSED TO CERTAIN LIGHT PATTERNS OR BACKGROUNDS THAT MAY BE CONTAINED ON A COMPUTER SCREEN OR WHILE USING OUR SERVICES. CERTAIN CONDITIONS MAY INDUCE A PREVIOUSLY UNKNOWN CONDITION OR UNDETECTED EPILEPTIC SYMPTOM IN USERS WHO HAVE SHOWN NO HISTORY OF ANY PRIOR SEIZURE OR EPILEPSY. SHOULD YOU, ANYONE YOU KNOW, OR ANYONE IN YOUR FAMILY HAVE AN EPILEPTIC CONDITION, PLEASE CONSULT A PHYSICIAN IF YOU EXPERIENCE ANY OF THE FOLLOWING SYMPTOMS WHILE USING OUR SERVICES: DIZZINESS, ALTERED VISION, EYE OR MUSCLE TWITCHES, LOSS OF AWARENESS, DISORIENTATION, ANY INVOLUNTARY MOVEMENT, OR CONVULSIONS. --- ## 20. LIMITATION OF LIABILITY YOU EXPLICITLY ACKNOWLEDGE, UNDERSTAND, AND AGREE THAT STADIA MAPS AND OUR SUBSIDIARIES, AFFILIATES, OFFICERS, EMPLOYEES, AGENTS, PARTNERS, AND LICENSORS SHALL NOT BE LIABLE TO YOU FOR ANY PUNITIVE, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR EXEMPLARY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DAMAGES WHICH MAY BE RELATED TO THE LOSS OF ANY PROFITS, GOODWILL, USE, DATA, AND/OR OTHER INTANGIBLE LOSSES, EVEN THOUGH WE MAY HAVE BEEN ADVISED OF SUCH POSSIBILITY THAT SAID DAMAGES MAY OCCUR, AND RESULT FROM: - THE USE OR INABILITY TO USE OUR SERVICE; - THE COST OF PROCURING SUBSTITUTE GOODS AND SERVICES; - UNAUTHORIZED ACCESS TO OR THE ALTERATION OF YOUR TRANSMISSIONS AND/OR DATA; - STATEMENTS OR CONDUCT OF ANY SUCH THIRD PARTY ON OUR SERVICE; - AND ANY OTHER MATTER WHICH MAY BE RELATED TO OUR SERVICE. --- ## 21. RELEASE In the event you have a dispute, you agree to release Stadia Maps (and its officers, directors, employees, agents, parent subsidiaries, affiliates, co-branders, partners, and any other third parties) from claims, demands, and damages (actual and consequential) of every kind and nature, known and unknown, suspected or unsuspected, disclosed and undisclosed, arising out of or in any way connected to such dispute. --- ## 22. SPECIAL ADMONITION RELATED TO FINANCIAL MATTERS Should you intend to create or to join any service, receive, or request any such news, messages, alerts, or other information from our Services concerning companies, stock quotes, investments, or securities, please review the above Sections Warranty Disclaimers and Limitations of Liability again. In addition, for this particular type of information, the phrase "Let the investor beware" is appropriate. Stadia Maps' content is provided primarily for informational purposes, and no content that shall be provided or included in our Services is intended for trading or investing purposes. Stadia Maps and our licensors shall not be responsible or liable for the accuracy, usefulness, or availability of any information transmitted and/or made available by way of our Services, and shall not be responsible or liable for any trading and/or investment decisions based on any such information. --- ## 23. EXCLUSION AND LIMITATIONS THERE ARE SOME JURISDICTIONS WHICH DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMITATION OF EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES. THEREFORE, SOME OF THE ABOVE LIMITATIONS OF SECTIONS WARRANTY DISCLAIMERS AND LIMITATION OF LIABILITY MAY NOT APPLY TO YOU. --- ## 24. THIRD PARTY BENEFICIARIES You herein acknowledge, understand, and agree, unless otherwise expressly provided in this Agreement, that there shall be no third-party beneficiaries to this Agreement. --- ## 25. NOTICE Stadia Maps may provide notices to you via email (using the address associated with your account), posting on our website, or other reasonable means. For material changes to this Agreement, we will use reasonable efforts to provide advance notice by email or prominent website posting before the change becomes effective. For fee increases, we will provide at least 30 days notice. Your continued use of our Services after the effective date constitutes acceptance of the updated Agreement. Any notices may not be received if you violate this Agreement by accessing our Services in an unauthorized manner. Your acceptance of this Agreement constitutes your agreement that you are deemed to have received any notices that would have been delivered had you accessed our Services in an authorized manner. --- ## 26. TRADEMARK INFORMATION You herein acknowledge, understand, and agree that all of the Stadia Maps trademarks, copyright, trade name, service marks, and other Stadia Maps logos and any brand features, and/or product and service names are trademarks and as such, are and shall remain the property of Stadia Maps. You herein agree not to display and/or use in any manner the Stadia Maps logo or marks without obtaining Stadia Maps' prior written consent. --- ## 27. COPYRIGHT OR INTELLECTUAL PROPERTY INFRINGEMENT CLAIMS NOTICE AND PROCEDURES Stadia Maps will always respect the intellectual property of others, and we ask that all of our Users do the same. With regards to appropriate circumstances and at its sole discretion, Stadia Maps may disable and/or terminate the accounts of any User who violates this Agreement and/or infringes the rights of others. If you feel that your work has been duplicated in such a way that would constitute copyright infringement, or if you believe your intellectual property rights have been otherwise violated, you should provide to us the following information: - The electronic or the physical signature of the individual that is authorized on behalf of the owner of the copyright or other intellectual property interest; - A description of the copyrighted work or other intellectual property that you believe has been infringed upon; - A description of the location of the site which you allege has been infringing upon your work; - Your physical address, telephone number, and email address; - A statement, in which you state that the alleged and disputed use of your work is not authorized by the copyright owner, its agents, or the law; - And finally, a statement, made under penalty of perjury, that the aforementioned information in your notice is truthful and accurate, and that you are the copyright or intellectual property owner, representative, or agent authorized to act on the copyright or intellectual property owner's behalf. Any claims should be sent to . --- ## 28. GENERAL INFORMATION ### 28.1 Entire Agreement This Agreement constitutes the entire agreement between you and Stadia Maps and shall govern the use of our Services, superseding any prior version of this Agreement between you and us with respect to Stadia Maps Services. You may also be subject to additional terms and conditions that may apply when you use or purchase certain other Stadia Maps Services, affiliate Services, third-party content, or third-party software. ### 28.2 Choice of Law and Forum It is at the mutual agreement of both you and Stadia Maps with regard to this Agreement that the relationship between the parties shall be governed by the laws of the state of Delaware without regard to its conflict of law provisions and that any and all claims, causes of action and/or disputes, arising out of or relating to this Agreement, or the relationship between you and Stadia Maps, shall be filed within the courts having jurisdiction within the County of New Castle, Delaware or the U.S. District Court located in said state. You and Stadia Maps agree to submit to the jurisdiction of the courts as previously mentioned, and agree to waive any and all objections to the exercise of jurisdiction over the parties by such courts and to venue in such courts. ### 28.3 Waiver and Severability of Terms At any time, should Stadia Maps fail to exercise or enforce any right or provision of this Agreement, such failure shall not constitute a waiver of such right or provision. If any provision of this Agreement is found by a court of competent jurisdiction to be invalid, the parties nevertheless agree that the court should endeavor to give effect to the parties' intentions as reflected in the provision, and the other provisions of this Agreement remain in full force and effect. ### 28.4 Statute of Limitations You acknowledge, understand, and agree that regardless of any statute or law to the contrary, any claim or action arising out of or related to the use of our Services or this Agreement must be filed within 1 year after said claim or cause of action arose or shall be forever barred. --- ## 29. VIOLATIONS Please report any and all violations of this Agreement to Stadia Maps via email at . --- ## 30. ENDPOINT AND SERVICE SPECIFIC TERMS ### 30.1 Satellite Imagery Addendum When using any Stadia Maps provided satellite imagery ("**Imagery**") in any form offered, including any basemaps which incorporate Imagery, you herein agree not to: - use Imagery for any purpose other than visualization; - publish or communicate in any way a competitive analysis (such as benchmarking) of imagery; - use Imagery to improve the geographical location of any imagery products through processes such as orthorectification or ground control point extraction; - process or bulk download Imagery. ### 30.2 Traffic Data and Traffic-Influenced Routing Addendum #### 30.2.1 Specific Prohibitions When using any of Stadia Maps' services which incorporate traffic data ("**Traffic Products**"), including, but not limited to the traffic-influenced routing profile in our routing services, when you herein agree not to: - use the routing services for any: - autonomous or assisted driving systems (SAE Levels 1-5), driver assistance systems (ADAS), lane-keeping systems, driver warning systems, or any system that controls or influences vehicle operation; - turn-by-turn navigation systems with voice guidance, lane-level navigation instructions, or route guidance integrated with vehicle controls; - screen replication systems (such as Android Auto, Apple CarPlay, MirrorLink, or SDL) except for audio-only implementations; - in-flight navigation, drone navigation, or any high-risk application where system failure could result in death, personal injury, or severe environmental damage. - use our Services for traffic law enforcement purposes, including but not limited to selecting locations for speed cameras, speed traps, or other traffic enforcement devices, or creating databases of traffic enforcement locations; - extract underlying raw traffic or routing data, or use our data to train machine learning models or AI systems in ways that would render your use of our Services redundant or create competing services; #### 30.2.2 Acceptable Use and Required Attribution When using Traffic Products, you may use such services for the following purposes, provided you maintain an appropriate active subscription: - route planning, visualization, and display, - estimated time of arrival (ETA) calculations, - route optimization for fleet management, asset tracking, and management, and - displaying traffic conditions on maps. **Speed Camera Data Notice:** Speed camera and traffic enforcement data may be prohibited in certain jurisdictions. You use such features entirely at your own risk and agree to indemnify us, TomTom, TomTom's affiliates against any liability arising from such use. When using Traffic Products, you must state the following in the "about box" or equivalent section for legal notices: > This application uses data, products, and services that have been supplied by Stadia Maps and TomTom subject to the following: > "© Stadia Maps. © TomTom. All rights reserved. This material is proprietary and the subject of copyright protection, > database right protection, and other intellectual property rights owned by TomTom or its suppliers. > Any unauthorized copying or disclosure of this material will lead to criminal and civil liabilities." > > Additional specific copyright notices and terms apply to third party content included in the Stadia Maps and TomTom data, > products and services as set out under {rel=""external""} and {rel=""external""}. When displaying Traffic Products in the context of a map, you must include the following copyright notice, in additional to any other required attribution (such as OpenStreetMap): > © Stadia Maps © TomTom These permitted uses are subject to all other restrictions in this Agreement. ### 30.3 Cacheable Static Maps Addendum Cacheable & Printable Static Maps Images ("**Images**") created using the designated cacheable static maps API endpoints are available under the following terms, which expand the acceptable use terms above, and supersede them when in conflict: #### 30.3.1 Definitions - "**Advertising Usage**" is any usage of the Images in media for advertising including, but not limited to, billboards, internet display advertising, promotional videos, promotional flyers. (For the avoidance of doubt, promotional content primarily displaying the customer's applications which includes our maps is not considered Advertising Usage, and thus always allowed, provided that the Images are shown incidentally in the context of the customer's application.) - "**Digital Usage**" is any usage of the Images in digital media (including, but not limited to, websites, emails, videos, and desktop applications). - "**Print Usage**" is any usage of the Images in printed documents, books, or similar media. #### 30.3.2 Print Usage License For Print Usage, Images may be printed and redistributed, up to 5,000 copies per Image, including for commercial use. When printing, you are also allowed to use Images for Advertising Usage, as long as your usage remains under 5,000 copies. For distribution of more copies, please contact us for pricing details. #### 30.3.3 Digital Usage License - For Digital Usage, Images may be saved, cached, modified, embedded in documents, and redistributed by your (or your subsidiaries) systems or your (or your subsidiaries) infrastructure. - This redistribution is allowed as long as you maintain an active paid subscription to Stadia Maps. - In Digital Usage, no additional rights for Advertising Usage are granted; please contact us for licensing.