[{"data":1,"prerenderedAt":758},["ShallowReactive",2],{"navigation_docs":3,"-auth-security-rate-limiting":155,"-auth-security-rate-limiting-surround":753},[4,26,47,68,93,106,127],{"title":5,"path":6,"stem":7,"children":8,"page":25},"Getting Started","\u002Fgetting-started","1.getting-started",[9,13,17,21],{"title":10,"path":11,"stem":12},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":14,"path":15,"stem":16},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F2.quick-start",{"title":18,"path":19,"stem":20},"Authentication","\u002Fgetting-started\u002Fauthentication","1.getting-started\u002F3.authentication",{"title":22,"path":23,"stem":24},"Rate Limits","\u002Fgetting-started\u002Frate-limits","1.getting-started\u002F4.rate-limits",false,{"title":27,"path":28,"stem":29,"children":30,"page":25},"API Reference","\u002Fapi-reference","2.api-reference",[31,35,39,43],{"title":32,"path":33,"stem":34},"Overview","\u002Fapi-reference\u002Foverview","2.api-reference\u002F1.overview",{"title":36,"path":37,"stem":38},"REST API","\u002Fapi-reference\u002Frest-api","2.api-reference\u002F2.rest-api",{"title":40,"path":41,"stem":42},"Error Codes","\u002Fapi-reference\u002Ferror-codes","2.api-reference\u002F3.error-codes",{"title":44,"path":45,"stem":46},"Pagination","\u002Fapi-reference\u002Fpagination","2.api-reference\u002F4.pagination",{"title":48,"path":49,"stem":50,"children":51,"page":25},"Map Integration","\u002Fmap-integration","3.map-integration",[52,56,60,64],{"title":53,"path":54,"stem":55},"Embed Maps","\u002Fmap-integration\u002Fembed-maps","3.map-integration\u002F1.embed-maps",{"title":57,"path":58,"stem":59},"Custom Styles","\u002Fmap-integration\u002Fcustom-styles","3.map-integration\u002F2.custom-styles",{"title":61,"path":62,"stem":63},"Tile Rendering","\u002Fmap-integration\u002Ftile-rendering","3.map-integration\u002F3.tile-rendering",{"title":65,"path":66,"stem":67},"Static Maps","\u002Fmap-integration\u002Fstatic-maps","3.map-integration\u002F4.static-maps",{"title":69,"path":70,"stem":71,"children":72,"page":25},"Geocoding","\u002Fgeocoding","4.geocoding",[73,77,81,85,89],{"title":74,"path":75,"stem":76},"Forward Geocoding (Search)","\u002Fgeocoding\u002Fforward-geocoding","4.geocoding\u002F1.forward-geocoding",{"title":78,"path":79,"stem":80},"Reverse Geocoding","\u002Fgeocoding\u002Freverse-geocoding","4.geocoding\u002F2.reverse-geocoding",{"title":82,"path":83,"stem":84},"Autocomplete","\u002Fgeocoding\u002Fautocomplete","4.geocoding\u002F3.autocomplete",{"title":86,"path":87,"stem":88},"Place Lookup","\u002Fgeocoding\u002Fplace-lookup","4.geocoding\u002F4.place-lookup",{"title":90,"path":91,"stem":92},"Nearby Search","\u002Fgeocoding\u002Fnearby","4.geocoding\u002F5.nearby",{"title":94,"path":95,"stem":96,"children":97,"page":25},"Routing","\u002Frouting","5.routing",[98,102],{"title":99,"path":100,"stem":101},"Directions","\u002Frouting\u002Fdirections","5.routing\u002F1.directions",{"title":103,"path":104,"stem":105},"Isochrones","\u002Frouting\u002Fisochrones","5.routing\u002F2.isochrones",{"title":107,"path":108,"stem":109,"children":110,"page":25},"Auth & Security","\u002Fauth-security","6.auth-security",[111,115,119,123],{"title":112,"path":113,"stem":114},"API Keys","\u002Fauth-security\u002Fapi-keys","6.auth-security\u002F1.api-keys",{"title":116,"path":117,"stem":118},"Scopes & Permissions","\u002Fauth-security\u002Fscopes-permissions","6.auth-security\u002F2.scopes-permissions",{"title":120,"path":121,"stem":122},"Rate Limiting","\u002Fauth-security\u002Frate-limiting","6.auth-security\u002F3.rate-limiting",{"title":124,"path":125,"stem":126},"Best Practices","\u002Fauth-security\u002Fbest-practices","6.auth-security\u002F4.best-practices",{"title":128,"path":129,"stem":130,"children":131,"page":25},"Mcp","\u002Fmcp","7.mcp",[132,135,139,143,147,151],{"title":32,"path":133,"stem":134},"\u002Fmcp\u002Foverview","7.mcp\u002F1.overview",{"title":136,"path":137,"stem":138},"Setup","\u002Fmcp\u002Fsetup","7.mcp\u002F2.setup",{"title":140,"path":141,"stem":142},"Available Tools","\u002Fmcp\u002Favailable-tools","7.mcp\u002F3.available-tools",{"title":144,"path":145,"stem":146},"GIS Integration","\u002Fmcp\u002Fgis-integration","7.mcp\u002F4.gis-integration",{"title":148,"path":149,"stem":150},"Examples","\u002Fmcp\u002Fexamples","7.mcp\u002F5.examples",{"title":152,"path":153,"stem":154},"Troubleshooting","\u002Fmcp\u002Ftroubleshooting","7.mcp\u002F6.troubleshooting",{"id":156,"title":120,"body":157,"description":747,"extension":748,"links":749,"meta":750,"navigation":564,"path":121,"seo":751,"stem":122,"__hash__":752},"docs\u002F6.auth-security\u002F3.rate-limiting.md",{"type":158,"value":159,"toc":736},"minimark",[160,164,169,174,181,185,188,232,236,239,259,263,266,295,339,343,349,411,414,447,732],[161,162,163],"p",{},"maps.guru enforces rate limits to protect the platform and ensure fair access for all users.",[165,166,168],"h2",{"id":167},"types-of-limits","Types of Limits",[170,171,173],"h3",{"id":172},"monthly-quotas","Monthly Quotas",[161,175,176,177,180],{},"Each subscription tier has monthly request quotas per service. See ",[178,179,22],"a",{"href":23}," for tier-specific numbers.",[170,182,184],{"id":183},"per-second-rate-limits","Per-Second Rate Limits",[161,186,187],{},"To prevent abuse, there are per-second request limits:",[189,190,191,204],"table",{},[192,193,194],"thead",{},[195,196,197,201],"tr",{},[198,199,200],"th",{},"Tier",[198,202,203],{},"Requests\u002FSecond",[205,206,207,216,224],"tbody",{},[195,208,209,213],{},[210,211,212],"td",{},"Free",[210,214,215],{},"10",[195,217,218,221],{},[210,219,220],{},"Pro",[210,222,223],{},"100",[195,225,226,229],{},[210,227,228],{},"Enterprise",[210,230,231],{},"Custom",[165,233,235],{"id":234},"how-enforcement-works","How Enforcement Works",[161,237,238],{},"Rate limiting uses Cloudflare Durable Objects for real-time tracking:",[240,241,242,246,249,256],"ol",{},[243,244,245],"li",{},"Each request increments a counter in the organization's Durable Object",[243,247,248],{},"The counter is checked against the monthly quota",[243,250,251,252],{},"If the quota is exceeded, the request is rejected with ",[253,254,255],"code",{},"429",[243,257,258],{},"Counters reset on the first day of each month (UTC)",[165,260,262],{"id":261},"rate-limit-headers","Rate Limit Headers",[161,264,265],{},"Every API response includes these headers:",[267,268,273],"pre",{"className":269,"code":270,"language":271,"meta":272,"style":272},"language-http shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","X-RateLimit-Limit: 500000\nX-RateLimit-Remaining: 499234\nX-RateLimit-Reset: 2025-02-01T00:00:00Z\n","http","",[253,274,275,283,289],{"__ignoreMap":272},[276,277,280],"span",{"class":278,"line":279},"line",1,[276,281,282],{},"X-RateLimit-Limit: 500000\n",[276,284,286],{"class":278,"line":285},2,[276,287,288],{},"X-RateLimit-Remaining: 499234\n",[276,290,292],{"class":278,"line":291},3,[276,293,294],{},"X-RateLimit-Reset: 2025-02-01T00:00:00Z\n",[189,296,297,307],{},[192,298,299],{},[195,300,301,304],{},[198,302,303],{},"Header",[198,305,306],{},"Description",[205,308,309,319,329],{},[195,310,311,316],{},[210,312,313],{},[253,314,315],{},"X-RateLimit-Limit",[210,317,318],{},"Monthly quota for this service",[195,320,321,326],{},[210,322,323],{},[253,324,325],{},"X-RateLimit-Remaining",[210,327,328],{},"Requests remaining this month",[195,330,331,336],{},[210,332,333],{},[253,334,335],{},"X-RateLimit-Reset",[210,337,338],{},"When the quota resets (UTC)",[165,340,342],{"id":341},"handling-rate-limits","Handling Rate Limits",[161,344,345,346,348],{},"When you receive a ",[253,347,255],{}," response:",[267,350,354],{"className":351,"code":352,"language":353,"meta":272,"style":272},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"statusCode\": 429,\n  \"message\": \"Monthly quota exceeded for maps service\"\n}\n","json",[253,355,356,362,384,405],{"__ignoreMap":272},[276,357,358],{"class":278,"line":279},[276,359,361],{"class":360},"sMK4o","{\n",[276,363,364,367,371,374,377,381],{"class":278,"line":285},[276,365,366],{"class":360},"  \"",[276,368,370],{"class":369},"spNyl","statusCode",[276,372,373],{"class":360},"\"",[276,375,376],{"class":360},":",[276,378,380],{"class":379},"sbssI"," 429",[276,382,383],{"class":360},",\n",[276,385,386,388,391,393,395,398,402],{"class":278,"line":291},[276,387,366],{"class":360},[276,389,390],{"class":369},"message",[276,392,373],{"class":360},[276,394,376],{"class":360},[276,396,397],{"class":360}," \"",[276,399,401],{"class":400},"sfazB","Monthly quota exceeded for maps service",[276,403,404],{"class":360},"\"\n",[276,406,408],{"class":278,"line":407},4,[276,409,410],{"class":360},"}\n",[170,412,124],{"id":413},"best-practices",[240,415,416,423,429,435,441],{},[243,417,418,422],{},[419,420,421],"strong",{},"Cache responses"," — Store geocoding results to avoid duplicate requests",[243,424,425,428],{},[419,426,427],{},"Use batch endpoints"," — Where available, batch multiple operations",[243,430,431,434],{},[419,432,433],{},"Monitor usage"," — Check the dashboard or API for current usage",[243,436,437,440],{},[419,438,439],{},"Implement backoff"," — For per-second limits, use exponential backoff",[243,442,443,446],{},[419,444,445],{},"Upgrade proactively"," — Monitor usage trends and upgrade before hitting limits",[267,448,452],{"className":449,"code":450,"language":451,"meta":272,"style":272},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","async function fetchWithRetry(url, retries = 3) {\n  for (let i = 0; i \u003C retries; i++) {\n    const response = await fetch(url);\n\n    if (response.status === 429) {\n      const delay = Math.pow(2, i) * 1000;\n      await new Promise(resolve => setTimeout(resolve, delay));\n      continue;\n    }\n\n    return response;\n  }\n  throw new Error('Rate limit exceeded after retries');\n}\n","javascript",[253,453,454,491,535,560,566,592,630,667,675,681,686,696,702,727],{"__ignoreMap":272},[276,455,456,459,462,466,469,473,476,479,482,485,488],{"class":278,"line":279},[276,457,458],{"class":369},"async",[276,460,461],{"class":369}," function",[276,463,465],{"class":464},"s2Zo4"," fetchWithRetry",[276,467,468],{"class":360},"(",[276,470,472],{"class":471},"sHdIc","url",[276,474,475],{"class":360},",",[276,477,478],{"class":471}," retries",[276,480,481],{"class":360}," =",[276,483,484],{"class":379}," 3",[276,486,487],{"class":360},")",[276,489,490],{"class":360}," {\n",[276,492,493,497,501,504,508,510,513,516,518,521,523,525,527,530,533],{"class":278,"line":285},[276,494,496],{"class":495},"s7zQu","  for",[276,498,500],{"class":499},"swJcz"," (",[276,502,503],{"class":369},"let",[276,505,507],{"class":506},"sTEyZ"," i",[276,509,481],{"class":360},[276,511,512],{"class":379}," 0",[276,514,515],{"class":360},";",[276,517,507],{"class":506},[276,519,520],{"class":360}," \u003C",[276,522,478],{"class":506},[276,524,515],{"class":360},[276,526,507],{"class":506},[276,528,529],{"class":360},"++",[276,531,532],{"class":499},") ",[276,534,361],{"class":360},[276,536,537,540,543,545,548,551,553,555,557],{"class":278,"line":291},[276,538,539],{"class":369},"    const",[276,541,542],{"class":506}," response",[276,544,481],{"class":360},[276,546,547],{"class":495}," await",[276,549,550],{"class":464}," fetch",[276,552,468],{"class":499},[276,554,472],{"class":506},[276,556,487],{"class":499},[276,558,559],{"class":360},";\n",[276,561,562],{"class":278,"line":407},[276,563,565],{"emptyLinePlaceholder":564},true,"\n",[276,567,569,572,574,577,580,583,586,588,590],{"class":278,"line":568},5,[276,570,571],{"class":495},"    if",[276,573,500],{"class":499},[276,575,576],{"class":506},"response",[276,578,579],{"class":360},".",[276,581,582],{"class":506},"status",[276,584,585],{"class":360}," ===",[276,587,380],{"class":379},[276,589,532],{"class":499},[276,591,361],{"class":360},[276,593,595,598,601,603,606,608,611,613,616,618,620,622,625,628],{"class":278,"line":594},6,[276,596,597],{"class":369},"      const",[276,599,600],{"class":506}," delay",[276,602,481],{"class":360},[276,604,605],{"class":506}," Math",[276,607,579],{"class":360},[276,609,610],{"class":464},"pow",[276,612,468],{"class":499},[276,614,615],{"class":379},"2",[276,617,475],{"class":360},[276,619,507],{"class":506},[276,621,532],{"class":499},[276,623,624],{"class":360},"*",[276,626,627],{"class":379}," 1000",[276,629,559],{"class":360},[276,631,633,636,639,643,645,648,651,654,656,658,660,662,665],{"class":278,"line":632},7,[276,634,635],{"class":495},"      await",[276,637,638],{"class":360}," new",[276,640,642],{"class":641},"sBMFI"," Promise",[276,644,468],{"class":499},[276,646,647],{"class":471},"resolve",[276,649,650],{"class":369}," =>",[276,652,653],{"class":464}," setTimeout",[276,655,468],{"class":499},[276,657,647],{"class":506},[276,659,475],{"class":360},[276,661,600],{"class":506},[276,663,664],{"class":499},"))",[276,666,559],{"class":360},[276,668,670,673],{"class":278,"line":669},8,[276,671,672],{"class":495},"      continue",[276,674,559],{"class":360},[276,676,678],{"class":278,"line":677},9,[276,679,680],{"class":360},"    }\n",[276,682,684],{"class":278,"line":683},10,[276,685,565],{"emptyLinePlaceholder":564},[276,687,689,692,694],{"class":278,"line":688},11,[276,690,691],{"class":495},"    return",[276,693,542],{"class":506},[276,695,559],{"class":360},[276,697,699],{"class":278,"line":698},12,[276,700,701],{"class":360},"  }\n",[276,703,705,708,710,713,715,718,721,723,725],{"class":278,"line":704},13,[276,706,707],{"class":495},"  throw",[276,709,638],{"class":360},[276,711,712],{"class":464}," Error",[276,714,468],{"class":499},[276,716,717],{"class":360},"'",[276,719,720],{"class":400},"Rate limit exceeded after retries",[276,722,717],{"class":360},[276,724,487],{"class":499},[276,726,559],{"class":360},[276,728,730],{"class":278,"line":729},14,[276,731,410],{"class":360},[733,734,735],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":272,"searchDepth":291,"depth":291,"links":737},[738,742,743,744],{"id":167,"depth":285,"text":168,"children":739},[740,741],{"id":172,"depth":291,"text":173},{"id":183,"depth":291,"text":184},{"id":234,"depth":285,"text":235},{"id":261,"depth":285,"text":262},{"id":341,"depth":285,"text":342,"children":745},[746],{"id":413,"depth":291,"text":124},"How rate limiting and quota enforcement work in maps.guru.","md",null,{},{"title":120,"description":747},"lGYoeT5WTd2vaAkehGxcWSXhdOewT088KmOwpvX-n8s",[754,756],{"title":116,"path":117,"stem":118,"description":755,"children":-1},"Understanding API key scopes and organization permissions.",{"title":124,"path":125,"stem":126,"description":757,"children":-1},"Security best practices for using maps.guru in production.",1777621084503]