[{"data":1,"prerenderedAt":298},["ShallowReactive",2],{"footer-learn-links":3,"site-prefooter-cta":16,"blog-\u002Fblog\u002Fwe-rebuilt-static-maps\u002F":24,"related-blog-\u002Fblog\u002Fwe-rebuilt-static-maps\u002F":259,"blog-author-\u002Fblog\u002Fwe-rebuilt-static-maps\u002F":288},[4,7,10,13],{"title":5,"path":6},"What Is a Navigation SDK?","\u002Flearn\u002Fwhat-is-a-navigation-sdk",{"title":8,"path":9},"What Is a Distance Matrix API?","\u002Flearn\u002Fdistance-matrix-api",{"title":11,"path":12},"Can You Store Geocoding Results?","\u002Flearn\u002Fgeocoding-data-storage",{"title":14,"path":15},"What Does a \"Free\" Map API Actually Cost?","\u002Flearn\u002Fwhat-does-a-free-map-api-cost",{"id":17,"extension":18,"heading":19,"meta":20,"stem":21,"text":22,"__hash__":23},"site\u002Fsite\u002Fprefooter-cta.yml","yml","Business Outcomes That Fuel Your Growth",{},"site\u002Fprefooter-cta","With Stadia Maps, you build the solutions that matter. Logistics platforms provide accurate ETAs, fleet management apps reduce fuel costs, and emergency dispatch systems improve response times.","XztWiZDFyAC0XCoeYLLQrcyaVmP8uvGWALRS354c9I4",{"id":25,"title":26,"abstract":27,"author":28,"body":29,"description":233,"extension":234,"head":27,"image":235,"imageAlt":236,"keywords":237,"meta":248,"modified":27,"navigation":249,"path":250,"proficiencyLevel":27,"published":251,"rawbody":252,"schemaOrg":27,"schemaType":27,"section":253,"seo":254,"stem":257,"__hash__":258},"blog\u002Fblog\u002Fwe-rebuilt-static-maps.md","We Rebuilt Static Maps",null,"luke-seelenbinder",{"type":30,"value":31,"toc":224},"minimark",[32,39,42,47,50,53,56,64,70,76,81,87,92,98,103,106,109,165,169,172,175,181,186,192,197,201,209,213,216],[33,34,35],"blockquote",{},[36,37,38],"p",{},"Early this month, we moved every Static Maps request to a new rendering system. The API didn't change, so you don't need to update anything on your side.",[36,40,41],{},"Responses got faster and more consistent. The old system was fast, most of the time. The problem was the slowest requests: 1%-5% of them regularly took 1-4s or more, even with caching. When traffic spiked, we kept the service up by slowing requests down or rejecting them.",[43,44,46],"h2",{"id":45},"fewer-tiles-faster-maps","Fewer Tiles, Faster Maps",[36,48,49],{},"We built our original Static Maps API by stitching together tiles from our tile servers. Like web maps, we fetched tiles from our internal systems, stitched them together, and overlaid your pins, lines, and labels to render the final static map image. This approach began to show its limits as our services scaled, and spikes in Static Maps often slowed all our Map products. We needed to fix that, so we completely overhauled the system.",[36,51,52],{},"We rewrote Static Maps in Rust using MapLibre Native. Instead of stitching tiles together to create the static map image, we now render the entire map as one image, with all overlays rendered directly in MapLibre Native. As a result, median response time halved. The slowest 1% of requests went from up to 8s to about 1s.",[36,54,55],{},"Here's a typical hour before the change. You can't even see the p75 or p50 times, because p99 dominates the timing so much:",[36,57,58],{},[59,60],"img",{"alt":61,"src":62,"style":63},"Static Maps response times before the rebuild, with p99 pinned at 8 seconds during spikes and p75 and p50 compressed against the bottom of the chart","\u002Fimages\u002Fcontent\u002Fstatic-maps-latency-before-all-percentiles.png","display: block; margin-inline: auto; max-width: 100%; width: auto;",[36,65,66],{},[67,68,69],"em",{},"Before, all percentiles",[36,71,72],{},[59,73],{"alt":74,"src":75,"style":63},"The same hour before the rebuild with p99 removed, showing p75 peaking near 1 second and p50 below it","\u002Fimages\u002Fcontent\u002Fstatic-maps-latency-before-p75-p50.png",[36,77,78],{},[67,79,80],{},"Before, p75 and p50",[36,82,83],{},[59,84],{"alt":85,"src":86,"style":63},"Static Maps response times after the rebuild, with p99 holding near 1 second and no spikes","\u002Fimages\u002Fcontent\u002Fstatic-maps-latency-after-all-percentiles.png",[36,88,89],{},[67,90,91],{},"After, all percentiles",[36,93,94],{},[59,95],{"alt":96,"src":97,"style":63},"The same hour after the rebuild with p99 removed, showing p75 and p50 flat and well under the previous baseline","\u002Fimages\u002Fcontent\u002Fstatic-maps-latency-after-p75-p50.png",[36,99,100],{},[67,101,102],{},"After, p75 and p50",[36,104,105],{},"The results speak for themselves. Worst-case, loaded performance is now faster than the previous system's baseline.",[36,107,108],{},"Here's the before and after. Each row shows how long it takes for 50%, 95%, or 99% of requests to finish:",[110,111,112,128],"table",{},[113,114,115],"thead",{},[116,117,118,122,125],"tr",{},[119,120,121],"th",{},"Percentile",[119,123,124],{},"Before",[119,126,127],{},"After",[129,130,131,143,154],"tbody",{},[116,132,133,137,140],{},[134,135,136],"td",{},"p50",[134,138,139],{},"~333ms",[134,141,142],{},"~170ms",[116,144,145,148,151],{},[134,146,147],{},"p95",[134,149,150],{},"1-4s",[134,152,153],{},"600-700ms",[116,155,156,159,162],{},[134,157,158],{},"p99",[134,160,161],{},"2-8s",[134,163,164],{},"~1s",[43,166,168],{"id":167},"handling-traffic-spikes-without-rejected-requests","Handling Traffic Spikes Without Rejected Requests",[36,170,171],{},"Because the new system renders maps directly, we can now scale automatically with load. Before, absorbing a spike meant adding capacity by hand or throttling requests. On launch day, a traffic spike we see regularly came through in full, with no rate limiting. For months, we'd slowed that same spike down or rejected part of it.",[36,173,174],{},"With this headroom and ability to scale on demand, we've raised rate limits on Static Maps requests. Your map tiles also benefit. Our tile servers used to render static maps, so a burst of static map traffic added load there. Static Maps now runs on its own stack.",[36,176,177],{},[59,178],{"alt":179,"src":180,"style":63},"Raster map tile response times before the rebuild, with p99 spiking to roughly 1 second","\u002Fimages\u002Fcontent\u002Fraster-tiles-before.png",[36,182,183],{},[67,184,185],{},"Raster map tiles, before",[36,187,188],{},[59,189],{"alt":190,"src":191,"style":63},"Raster map tile response times after the rebuild, with p99 holding between 400 and 650 milliseconds","\u002Fimages\u002Fcontent\u002Fraster-tiles-after.png",[36,193,194],{},[67,195,196],{},"Raster map tiles, after",[43,198,200],{"id":199},"but-wait-theres-more","But Wait, There's More",[36,202,203,208],{},[204,205,207],"a",{"href":206},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fstatic-maps\u002F","Static Maps"," now accepts fractional zoom levels, such as 12.5. You can frame a map exactly, instead of choosing between two whole zoom levels that are each a little off. Each image also now renders in a single pass. Labels no longer get cut off at internal boundaries, and a style or data update can't produce an image with mismatched sections.",[43,210,212],{"id":211},"whats-next","What's Next",[36,214,215],{},"We're still tuning performance and reliability as the new system settles in. By building a faster, more stable Static Maps platform and relieving our other Maps systems of the burden of Static Maps, we not only make every response faster, but also allow us to launch more of your most-requested features across our entire Maps platform.",[36,217,218,219,223],{},"As always, reach out to us at ",[204,220,222],{"href":221},"mailto:support@stadiamaps.com","support@stadiamaps.com"," with any questions.",{"title":225,"searchDepth":226,"depth":226,"links":227},"",4,[228,230,231,232],{"id":45,"depth":229,"text":46},2,{"id":167,"depth":229,"text":168},{"id":199,"depth":229,"text":200},{"id":211,"depth":229,"text":212},"We moved every Static Maps request to a new rendering system built in Rust on MapLibre Native. Median response time halved and the slowest 1% went from up to 8s to about 1s.","md","\u002Fimages\u002Fog\u002Fwe-rebuilt-static-maps.png","We Rebuilt Static Maps — Stadia Maps",[238,239,240,241,242,243,244,245,246,247],"Static Maps API","static map image","MapLibre Native","Rust rendering","API latency","p99 response time","rate limits","fractional zoom","map tile performance","server-side rendering",{},true,"\u002Fblog\u002Fwe-rebuilt-static-maps","2026-10-29","---\ntitle: We Rebuilt Static Maps\ndescription: We moved every Static Maps request to a new rendering system built in Rust on MapLibre Native. Median response time halved and the slowest 1% went from up to 8s to about 1s.\nauthor: luke-seelenbinder\nimage: \u002Fimages\u002Fog\u002Fwe-rebuilt-static-maps.png\nimageAlt: We Rebuilt Static Maps — Stadia Maps\nkeywords:\n  - Static Maps API\n  - static map image\n  - MapLibre Native\n  - Rust rendering\n  - API latency\n  - p99 response time\n  - rate limits\n  - fractional zoom\n  - map tile performance\n  - server-side rendering\npublished: 2026-10-29\nsection: Maps\nseo:\n  title: \"Static Maps Rebuilt: Half the Latency, No Throttling\"\n  ogTitle: We Rebuilt Static Maps\n  description: Our Static Maps API now renders in one pass with MapLibre Native instead of stitching tiles. p50 dropped from ~333ms to ~170ms and p99 from 2-8s to ~1s.\n---\n\n> Early this month, we moved every Static Maps request to a new rendering system. The API didn't change, so you don't need to update anything on your side.\n\nResponses got faster and more consistent. The old system was fast, most of the time. The problem was the slowest requests: 1%-5% of them regularly took 1-4s or more, even with caching. When traffic spiked, we kept the service up by slowing requests down or rejecting them.\n\n## Fewer Tiles, Faster Maps\n\nWe built our original Static Maps API by stitching together tiles from our tile servers. Like web maps, we fetched tiles from our internal systems, stitched them together, and overlaid your pins, lines, and labels to render the final static map image. This approach began to show its limits as our services scaled, and spikes in Static Maps often slowed all our Map products. We needed to fix that, so we completely overhauled the system.\n\nWe rewrote Static Maps in Rust using MapLibre Native. Instead of stitching tiles together to create the static map image, we now render the entire map as one image, with all overlays rendered directly in MapLibre Native. As a result, median response time halved. The slowest 1% of requests went from up to 8s to about 1s.\n\nHere's a typical hour before the change. You can't even see the p75 or p50 times, because p99 dominates the timing so much:\n\n![Static Maps response times before the rebuild, with p99 pinned at 8 seconds during spikes and p75 and p50 compressed against the bottom of the chart](\u002Fimages\u002Fcontent\u002Fstatic-maps-latency-before-all-percentiles.png){style=\"display: block; margin-inline: auto; max-width: 100%; width: auto;\"}\n\n*Before, all percentiles*\n\n![The same hour before the rebuild with p99 removed, showing p75 peaking near 1 second and p50 below it](\u002Fimages\u002Fcontent\u002Fstatic-maps-latency-before-p75-p50.png){style=\"display: block; margin-inline: auto; max-width: 100%; width: auto;\"}\n\n*Before, p75 and p50*\n\n![Static Maps response times after the rebuild, with p99 holding near 1 second and no spikes](\u002Fimages\u002Fcontent\u002Fstatic-maps-latency-after-all-percentiles.png){style=\"display: block; margin-inline: auto; max-width: 100%; width: auto;\"}\n\n*After, all percentiles*\n\n![The same hour after the rebuild with p99 removed, showing p75 and p50 flat and well under the previous baseline](\u002Fimages\u002Fcontent\u002Fstatic-maps-latency-after-p75-p50.png){style=\"display: block; margin-inline: auto; max-width: 100%; width: auto;\"}\n\n*After, p75 and p50*\n\nThe results speak for themselves. Worst-case, loaded performance is now faster than the previous system's baseline.\n\nHere's the before and after. Each row shows how long it takes for 50%, 95%, or 99% of requests to finish:\n\n| Percentile | Before  | After     |\n| ---------- | ------- | --------- |\n| p50        | \\~333ms | \\~170ms   |\n| p95        | 1-4s    | 600-700ms |\n| p99        | 2-8s    | \\~1s      |\n\n## Handling Traffic Spikes Without Rejected Requests\n\nBecause the new system renders maps directly, we can now scale automatically with load. Before, absorbing a spike meant adding capacity by hand or throttling requests. On launch day, a traffic spike we see regularly came through in full, with no rate limiting. For months, we'd slowed that same spike down or rejected part of it.\n\nWith this headroom and ability to scale on demand, we've raised rate limits on Static Maps requests. Your map tiles also benefit. Our tile servers used to render static maps, so a burst of static map traffic added load there. Static Maps now runs on its own stack.\n\n![Raster map tile response times before the rebuild, with p99 spiking to roughly 1 second](\u002Fimages\u002Fcontent\u002Fraster-tiles-before.png){style=\"display: block; margin-inline: auto; max-width: 100%; width: auto;\"}\n\n*Raster map tiles, before*\n\n![Raster map tile response times after the rebuild, with p99 holding between 400 and 650 milliseconds](\u002Fimages\u002Fcontent\u002Fraster-tiles-after.png){style=\"display: block; margin-inline: auto; max-width: 100%; width: auto;\"}\n\n*Raster map tiles, after*\n\n## But Wait, There's More\n\n[Static Maps](https:\u002F\u002Fdocs.stadiamaps.com\u002Fstatic-maps\u002F) now accepts fractional zoom levels, such as 12.5. You can frame a map exactly, instead of choosing between two whole zoom levels that are each a little off. Each image also now renders in a single pass. Labels no longer get cut off at internal boundaries, and a style or data update can't produce an image with mismatched sections.\n\n## What's Next\n\nWe're still tuning performance and reliability as the new system settles in. By building a faster, more stable Static Maps platform and relieving our other Maps systems of the burden of Static Maps, we not only make every response faster, but also allow us to launch more of your most-requested features across our entire Maps platform.\n\nAs always, reach out to us at \u003Csupport@stadiamaps.com> with any questions.\n","Maps",{"title":255,"ogTitle":26,"description":256},"Static Maps Rebuilt: Half the Latency, No Throttling","Our Static Maps API now renders in one pass with MapLibre Native instead of stitching tiles. p50 dropped from ~333ms to ~170ms and p99 from 2-8s to ~1s.","blog\u002Fwe-rebuilt-static-maps","sa_14hO8rAV3qEULa9BD4MUg1ji2G0gSou0Kv79U2Nc",[260,269,279],{"title":261,"description":262,"path":263,"published":264,"keywords":265,"rawbody":268},"Announcing Improved Static Maps with Customizable Lines","Add customizable polylines to static map images to visualize routes, hiking tracks, and flight paths, plus a new Mumbai PoP for faster maps in India.","\u002Fblog\u002Fstatic-maps-with-polylines","2022-09-09",[207,238,266,267],"Polylines","Map Images","---\ntitle: Announcing Improved Static Maps with Customizable Lines\ndescription: Add customizable polylines to static map images to visualize routes, hiking tracks, and flight paths, plus a new Mumbai PoP for faster maps in India.\nseo:\n  title: \"Draw Polylines on Static Maps: Routes, Tracks & Paths\"\n  description: Add customizable polylines to static map images to visualize routes, hiking tracks, and flight paths, plus a new Mumbai PoP for faster maps in India.\nsection: Maps\nkeywords:\n  - Static Maps\n  - Static Maps API\n  - Polylines\n  - Map Images\nauthor: luke-seelenbinder\npublished: 2022-09-09\nmodified: 2026-07-02\n---\n\n> The Stadia Maps Static Maps API supports rendering polylines directly on map images with customizable color and width, so you can visualize navigation routes, hiking tracks, or flight paths without an interactive map or postprocessing.\n\nWe are excited to announce the release of our improved static maps product! [Static maps](\u002Fproducts\u002Fmaps\u002Fstatic-maps\u002F) enable\ndevelopers to quickly and easily include maps in their applications as images. Included in this release are many\nperformance improvements, the ability to directly draw lines on the map, and overhauled documentation.\n\n## Polyline Support for Static Maps\n\nSince the static maps product launched, customers have requested\nthe ability to draw lines directly on static maps, and today, we\nare officially announcing support for rendering polylines. With our\nupdated API, developers can save time and resources by using static maps\nto solve problems where previously interactive maps or some other\npostprocessing was required.\n\n![a map of markers and a line in Tallinn, Estonia](https:\u002F\u002Fstadiamaps.com\u002Fstatic\u002Falidade_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)\n\n## Customizable from the Start\n\nWhether you need to visualize a navigation route, a hiking track, or your most recent flight path, adjusting the look\nand feel is key to a great static map. That’s why we made sure you can fully customize each line to achieve\nthe perfect match to your app, just as you can already do with markers.\n\n![a map of markers and a line in Tallinn, Estonia](https:\u002F\u002Fstadiamaps.com\u002Fstatic\u002Falidade_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)\n\nWith these updates, the static maps experience is faster, smoother, and more integrated than ever before.\n\n## Get Started Today!\n\nWe've updated our [static maps documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fstatic-maps\u002F) so it's even easier\nto get started building maps. Update your current maps or create your first static map today!\n\nFor newer static maps features, see [custom markers and POST support](\u002Fblog\u002Fcustom-markers-in-static-map-images\u002F).\n\n## A New PoP Location in Mumbai\n\n![map of India with Mumbai highlighted](https:\u002F\u002Ftiles.stadiamaps.com\u002Fstatic\u002Fosm_bright?m=19.076111,72.8775\\&center=19.076111,72.8775\\&zoom=4\\&size=600x250@2x)\n\nAs part of our efforts to support our global customer-base with high-reliability, low-latency, and unbeatable\nperformance, we’re always looking for ways to expand our PoP network. After some unexpected delays, we’re\nnow able to unveil a new PoP region in Mumbai, allowing us to better serve our Indian users. We will continue expanding\nthe network in coordination with our infrastructure partners. New locations in Australia and Canada are already planned.\n",{"title":270,"description":271,"path":272,"published":273,"keywords":274,"rawbody":278},"Announcing Cacheable Static Maps","Generate, store, and reuse static map snapshots for print, email, and offline use with the cacheable static maps endpoint — no custom license needed.","\u002Fblog\u002Fannouncing-cacheable-static-map-images","2024-03-26",[207,238,275,276,277],"Map Caching","Caching","Print Maps","---\ntitle: Announcing Cacheable Static Maps\ndescription: Generate, store, and reuse static map snapshots for print, email, and offline use with the cacheable static maps endpoint — no custom license needed.\nseo:\n  title: \"Cacheable Static Maps: Store, Print & Reuse Map Images\"\n  description: Generate, store, and reuse static map snapshots for print, email, and offline use with the cacheable static maps endpoint — no custom license needed.\nsection: Maps\nkeywords:\n  - Static Maps\n  - Static Maps API\n  - Map Caching\n  - Caching\n  - Print Maps\nauthor: luke-seelenbinder\npublished: 2024-03-26\nmodified: 2026-07-02\n---\n\n> The Stadia Maps cacheable static maps endpoint lets you store or cache generated map images in your own infrastructure or image CDN for as long as you maintain a paid subscription, and covers most print use cases without a custom license. Request parameters are identical to the standard Static Maps API, so migration takes seconds.\n\nOur [Static Maps API](\u002Fproducts\u002Fmaps\u002Fstatic-maps\u002F) offers an easy way to add maps to your website or app.\nIf your use case doesn't require interactive maps,\nyou can push all the rendering complexity to our servers.\nWe'll even let you customize the maps with annotations like markers and lines,\nall using a simple URL!\n\n## Simpler Licensing for Printing and Caching\n\nToday, we're launching a cacheable static maps endpoint with special terms to enable new use cases.\nFor digital use, this endpoint allows storing or caching map images in your infrastructure or an image CDN\n(as long as you maintain a paid subscription).\nFor print applications, you'll no longer need to contact us for a custom license if your usage meets certain conditions.\nWith these two changes, we're making it easier for you to build solutions without having to ask us for custom pricing or terms.\n\n## Enhanced Privacy, CDN Support, and Performance\n\nThe new digital use terms allow you to create solutions using static maps so end-user traffic never goes to our servers.\nIf you're looking for a way to enhance end-user privacy beyond our no-tracking policy,\nor have particularly strict compliance needs,\nthe new endpoint enables you to pre-generate or cache images fully under your control.\n\nFor users looking to utilize popular image CDNs or push-based deployment strategies used by some site generators,\nthis new endpoint allows you to take advantage of these enhancements and remain compliant with our terms.\n\nCacheable static maps are available using a new endpoint,\nwhich you can read about in our [documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fstatic-maps\u002F).\nThe request parameters are the same as our existing static endpoint,\nso the migration only takes a few seconds.\nWe can't offer caching on the Alidade Satellite style at this time,\nbut all other features and capabilities are identical,\nincluding access to the [map styles from Stamen Design](https:\u002F\u002Fdocs.stadiamaps.com\u002Fthemes\u002F#stadia-stamen).\n\n> **2026 Update:** You can now use the Alidade Satellite style in our static and cacheable static maps endpoints.\n\n## Learn More\n\n- Learn how to use the new endpoint from our [static maps documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fstatic-maps\u002F).\n- See our [pricing](\u002Fpricing\u002F) for cacheable static maps and all other endpoints.\n- Read our [terms for the new endpoint](\u002Fterms-of-service\u002F#cacheable-terms).\n",{"title":280,"description":281,"path":282,"published":283,"keywords":284,"rawbody":287},"Custom Markers and POST Support for Static Maps","Add custom marker images (up to 5 per request, 128px) to static maps, and send complex requests as JSON via POST to bypass URL length limits.","\u002Fblog\u002Fcustom-markers-in-static-map-images","2024-05-14",[207,238,285,267,286],"Custom Markers","POST Request","---\ntitle: Custom Markers and POST Support for Static Maps\ndescription: Add custom marker images (up to 5 per request, 128px) to static maps, and send complex requests as JSON via POST to bypass URL length limits.\nseo:\n  title: \"Static Maps API: Custom Markers & POST Requests\"\n  description: Add custom marker images (up to 5 per request, 128px) to static maps, and send complex requests as JSON via POST to bypass URL length limits.\nsection: Maps\nkeywords:\n  - Static Maps\n  - Static Maps API\n  - Custom Markers\n  - Map Images\n  - POST Request\nauthor: ian-wagner\npublished: 2024-05-14\nmodified: 2026-07-02\n---\n\n> The Stadia Maps Static Maps API supports custom marker images — up to 5 per request at up to 128px per dimension — and accepts POST requests with a JSON body on the cacheable endpoint, eliminating URL length limits for complex maps.\n\n[Static Maps](\u002Fproducts\u002Fmaps\u002Fstatic-maps\u002F) are the fastest way to add maps to your website or app.\nSince each map is a single PNG or JPEG,\nthey are a lot easier to set up than interactive maps.\nYou can even add markers and lines to static maps—our servers handle the hard work.\n\n## How to Use Custom Marker Images\n\nToday you can add markers to a static map by including the coordinates in your request.\nWe’ll automatically select a suitable image based on the map style.\nYou can also use a labeled marker with a classic solid design for differentiation.\n\nToday, we’re letting you go even further with branding and improved differentiation.\nJust send us the image URL in your request to customize the marker image!\nThis feature is now available on all plans that have access to static maps\n(including free trials).\n\nWe’re launching with support for up to 5 custom marker images per request,\ngiving you plenty of flexibility.\nAnd the images can be up to 128px in each dimension,\nso your carefully designed icons will look great on retina and other HiDPI screens.\n\n![Static Map](https:\u002F\u002Ftiles.stadiamaps.com\u002Fstatic\u002Falidade_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)\n\n## POST Requests: No More URL Length Limits\n\nBefore today, the Static Maps API was configurable\nvia query string parameters.\nWe occasionally heard from customers having issues though,\nbecause web browsers and servers place limits on URL length.\nThis limited the level of detail and customization.\n\nThat’s why we’re now accepting POST requests\nto the [cacheable static maps endpoint](\u002Fblog\u002Fannouncing-cacheable-static-map-images\u002F).\nPOST parameters are sent via a JSON body,\nmaking it easier to specify complex requests.\nAnd when we add new features—like polygons —\nyou won’t have to worry about URL length.\n\nAs far as we know, we’re the first provider to offer this!\n\nHere’s an example request body:\n\n```json\n{\n  \"center\": \"59.438484,24.742595\",\n  \"size\": \"600x400@2x\",\n  \"zoom\": 14,\n  \"lines\": [\n    {\n      \"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\",\n      \"color\": \"333333\",\n      \"width\": 5\n    }\n  ],\n  \"markers\": [\n    {\n      \"lat\": 59.436884,\n      \"lon\": 24.742595\n    },\n    {\n      \"lat\": 59.441293,\n      \"lon\": 24.747380,\n      \"style\": \"custom:https:\u002F\u002Fdocs.stadiamaps.com\u002Fimg\u002Fleaf-green.png\",\n      \"anchor\": [-32, -95]\n    },\n    {\n      \"lat\": 59.435561,\n      \"lon\": 24.747605,\n      \"color\": \"red\",\n      \"label\": \"E\"\n    }\n  ]\n}\n```\n\n## We’re not stopping here!\n\nOur roadmap still has more features on it (thanks to you!).\nKeep an eye out for integration with our routing API,\npolygon drawing, and more—all in a single API call.\n\n## Get Started\n\nWe’ve updated our [documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fstatic-maps\u002F)\nwith everything you need to get started,\nincluding HTML and cURL examples.\nAnd if you have any questions, you’re just an email away from real human support.\nDrop us a note at \u003Csupport@stadiamaps.com>.\n",{"id":289,"bio":290,"extension":18,"jobTitle":291,"meta":292,"name":293,"sameAs":294,"slug":28,"stem":296,"twitterCreator":27,"type":27,"url":27,"__hash__":297},"authors\u002Fauthors\u002Fluke-seelenbinder.yml","Luke is co-founder and CEO of Stadia Maps. He leads the company's strategy and product direction.","Founder & CEO",{},"Luke Seelenbinder",[295],"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Flukeseelenbinder\u002F","authors\u002Fluke-seelenbinder","9FK6KsqXgHtTg5znGf2tRp8VFBPxHolDjCAZVZOcm1s",1793270588695]