[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"guide-google-maps-integration":3,"related-google-maps-integration":4547},{"id":4,"title":5,"body":6,"category":4537,"description":4538,"draft":4539,"extension":4540,"icon":4541,"meta":4542,"navigation":167,"order":130,"path":4543,"seo":4544,"stem":4545,"__hash__":4546},"guides\u002Fguides\u002Fgoogle-maps-integration.md","Using Township Canada API with Google Maps",{"type":7,"value":8,"toc":4525},"minimark",[9,14,23,30,34,61,64,68,79,140,143,304,308,326,786,793,797,804,996,999,1114,1120,1124,1130,1507,1511,1522,2142,2149,2163,2167,2174,4468,4472,4498,4501,4505,4522],[10,11,13],"h2",{"id":12},"what-youll-build","What You'll Build",[15,16,17,18,22],"p",{},"By the end of this guide, your Google Maps application will accept a legal land description like ",[19,20,21],"code",{},"NW-25-24-1-W5"," as input, drop a marker at the location's centroid, and draw the quarter-section boundary polygon on the map. You'll also add an autocomplete search box so users can type partial descriptions and pick from suggestions.",[15,24,25,26,29],{},"The Township Canada API returns GeoJSON directly from its search and boundary endpoints, which pairs cleanly with the ",[19,27,28],{},"google.maps.Data"," layer - no coordinate parsing or projection math required on your end.",[10,31,33],{"id":32},"prerequisites","Prerequisites",[35,36,37,46,58],"ul",{},[38,39,40,41],"li",{},"A Township Canada API key - get one from the ",[42,43,45],"a",{"href":44},"\u002Fapp\u002Fapi","API page",[38,47,48,49,53,54,57],{},"A Google Maps JavaScript API key with the ",[50,51,52],"strong",{},"Maps"," and ",[50,55,56],{},"Places"," libraries enabled",[38,59,60],{},"Basic familiarity with HTML and JavaScript",[15,62,63],{},"No build tools are needed. The full working example at the bottom of this guide runs from a single HTML file.",[10,65,67],{"id":66},"step-1-load-google-maps-javascript-api","Step 1: Load Google Maps JavaScript API",[15,69,70,71,74,75,78],{},"Add the script tag to your HTML ",[19,72,73],{},"\u003Chead>",", replacing ",[19,76,77],{},"YOUR_GMAPS_KEY"," with your Google Maps API key:",[80,81,86],"pre",{"className":82,"code":83,"language":84,"meta":85,"style":85},"language-html shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","\u003Cscript\n  async\n  src=\"https:\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs?key=YOUR_GMAPS_KEY&callback=initMap\"\n>\u003C\u002Fscript>\n","html","",[19,87,88,101,108,128],{"__ignoreMap":85},[89,90,93,97],"span",{"class":91,"line":92},"line",1,[89,94,96],{"class":95},"soVBu","\u003C",[89,98,100],{"class":99},"sJFLg","script\n",[89,102,104],{"class":91,"line":103},2,[89,105,107],{"class":106},"s5q8q","  async\n",[89,109,111,114,117,121,125],{"class":91,"line":110},3,[89,112,113],{"class":106},"  src",[89,115,116],{"class":95},"=",[89,118,120],{"class":119},"sbYkP","\"",[89,122,124],{"class":123},"sTbE_","https:\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs?key=YOUR_GMAPS_KEY&callback=initMap",[89,126,127],{"class":119},"\"\n",[89,129,131,134,137],{"class":91,"line":130},4,[89,132,133],{"class":95},">\u003C\u002F",[89,135,136],{"class":99},"script",[89,138,139],{"class":95},">\n",[15,141,142],{},"Initialize the map centered on Alberta for a reasonable default starting point:",[80,144,148],{"className":145,"code":146,"language":147,"meta":85,"style":85},"language-javascript shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","let map;\n\nfunction initMap() {\n  map = new google.maps.Map(document.getElementById(\"map\"), {\n    center: { lat: 53.5, lng: -113.5 },\n    zoom: 10\n  });\n}\n","javascript",[19,149,150,163,169,184,239,277,288,298],{"__ignoreMap":85},[89,151,152,156,160],{"class":91,"line":92},[89,153,155],{"class":154},"s5Kfy","let",[89,157,159],{"class":158},"sSC40"," map",[89,161,162],{"class":95},";\n",[89,164,165],{"class":91,"line":103},[89,166,168],{"emptyLinePlaceholder":167},true,"\n",[89,170,171,174,178,181],{"class":91,"line":110},[89,172,173],{"class":154},"function",[89,175,177],{"class":176},"sljsM"," initMap",[89,179,180],{"class":95},"()",[89,182,183],{"class":95}," {\n",[89,185,186,189,192,196,199,202,205,207,210,214,217,219,222,224,226,229,231,234,237],{"class":91,"line":130},[89,187,188],{"class":158},"  map",[89,190,191],{"class":95}," =",[89,193,195],{"class":194},"sVsLi"," new",[89,197,198],{"class":158}," google",[89,200,201],{"class":95},".",[89,203,204],{"class":158},"maps",[89,206,201],{"class":95},[89,208,209],{"class":176},"Map",[89,211,213],{"class":212},"sLdnO","(",[89,215,216],{"class":158},"document",[89,218,201],{"class":95},[89,220,221],{"class":176},"getElementById",[89,223,213],{"class":212},[89,225,120],{"class":119},[89,227,228],{"class":123},"map",[89,230,120],{"class":119},[89,232,233],{"class":212},")",[89,235,236],{"class":95},",",[89,238,183],{"class":95},[89,240,242,246,249,252,255,257,261,263,266,268,271,274],{"class":91,"line":241},5,[89,243,245],{"class":244},"suXOh","    center",[89,247,248],{"class":95},":",[89,250,251],{"class":95}," {",[89,253,254],{"class":244}," lat",[89,256,248],{"class":95},[89,258,260],{"class":259},"s7CZa"," 53.5",[89,262,236],{"class":95},[89,264,265],{"class":244}," lng",[89,267,248],{"class":95},[89,269,270],{"class":194}," -",[89,272,273],{"class":259},"113.5",[89,275,276],{"class":95}," },\n",[89,278,280,283,285],{"class":91,"line":279},6,[89,281,282],{"class":244},"    zoom",[89,284,248],{"class":95},[89,286,287],{"class":259}," 10\n",[89,289,291,294,296],{"class":91,"line":290},7,[89,292,293],{"class":95},"  }",[89,295,233],{"class":212},[89,297,162],{"class":95},[89,299,301],{"class":91,"line":300},8,[89,302,303],{"class":95},"}\n",[10,305,307],{"id":306},"step-2-search-and-place-markers","Step 2: Search and Place Markers",[15,309,310,311,314,315,318,319,322,323,325],{},"The search endpoint returns a ",[19,312,313],{},"FeatureCollection"," with two features: a ",[19,316,317],{},"MultiPolygon"," for the boundary and a ",[19,320,321],{},"Point"," for the centroid. To drop a marker, extract the centroid ",[19,324,321],{}," feature from the response:",[80,327,329],{"className":145,"code":328,"language":147,"meta":85,"style":85},"async function searchLocation(query) {\n  const response = await fetch(\n    `https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?location=${encodeURIComponent(query)}`,\n    {\n      headers: { \"X-API-Key\": \"YOUR_API_KEY\" }\n    }\n  );\n\n  const data = await response.json();\n\n  \u002F\u002F Extract the centroid point feature\n  const centroid = data.features.find((f) => f.properties.shape === \"centroid\");\n\n  if (!centroid) return null;\n\n  const [lng, lat] = centroid.geometry.coordinates;\n\n  const marker = new google.maps.Marker({\n    position: { lat, lng },\n    map,\n    title: centroid.properties.legal_location\n  });\n\n  map.panTo({ lat, lng });\n  map.setZoom(13);\n\n  return { marker, data };\n}\n",[19,330,331,352,372,404,409,439,444,451,455,478,483,490,552,557,581,586,620,625,653,671,679,698,707,712,740,759,764,781],{"__ignoreMap":85},[89,332,333,336,339,342,344,348,350],{"class":91,"line":92},[89,334,335],{"class":154},"async",[89,337,338],{"class":154}," function",[89,340,341],{"class":176}," searchLocation",[89,343,213],{"class":95},[89,345,347],{"class":346},"sqOPj","query",[89,349,233],{"class":95},[89,351,183],{"class":95},[89,353,354,357,360,362,366,369],{"class":91,"line":103},[89,355,356],{"class":154},"  const",[89,358,359],{"class":158}," response",[89,361,191],{"class":95},[89,363,365],{"class":364},"siDh9"," await",[89,367,368],{"class":176}," fetch",[89,370,371],{"class":212},"(\n",[89,373,374,377,380,384,387,390,393,395,398,401],{"class":91,"line":110},[89,375,376],{"class":119},"    `",[89,378,379],{"class":123},"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?location=",[89,381,383],{"class":382},"s8XtY","${",[89,385,386],{"class":176},"encodeURIComponent",[89,388,213],{"class":389},"snCua",[89,391,347],{"class":392},"su_V2",[89,394,233],{"class":389},[89,396,397],{"class":382},"}",[89,399,400],{"class":119},"`",[89,402,403],{"class":95},",\n",[89,405,406],{"class":91,"line":130},[89,407,408],{"class":95},"    {\n",[89,410,411,414,416,418,421,425,427,429,431,434,436],{"class":91,"line":241},[89,412,413],{"class":244},"      headers",[89,415,248],{"class":95},[89,417,251],{"class":95},[89,419,420],{"class":119}," \"",[89,422,424],{"class":423},"sQtxO","X-API-Key",[89,426,120],{"class":119},[89,428,248],{"class":95},[89,430,420],{"class":119},[89,432,433],{"class":123},"YOUR_API_KEY",[89,435,120],{"class":119},[89,437,438],{"class":95}," }\n",[89,440,441],{"class":91,"line":279},[89,442,443],{"class":95},"    }\n",[89,445,446,449],{"class":91,"line":290},[89,447,448],{"class":212},"  )",[89,450,162],{"class":95},[89,452,453],{"class":91,"line":300},[89,454,168],{"emptyLinePlaceholder":167},[89,456,458,460,463,465,467,469,471,474,476],{"class":91,"line":457},9,[89,459,356],{"class":154},[89,461,462],{"class":158}," data",[89,464,191],{"class":95},[89,466,365],{"class":364},[89,468,359],{"class":158},[89,470,201],{"class":95},[89,472,473],{"class":176},"json",[89,475,180],{"class":212},[89,477,162],{"class":95},[89,479,481],{"class":91,"line":480},10,[89,482,168],{"emptyLinePlaceholder":167},[89,484,486],{"class":91,"line":485},11,[89,487,489],{"class":488},"s9Tkl","  \u002F\u002F Extract the centroid point feature\n",[89,491,493,495,498,500,502,504,507,509,512,514,516,519,521,525,528,530,533,535,538,541,543,546,548,550],{"class":91,"line":492},12,[89,494,356],{"class":154},[89,496,497],{"class":158}," centroid",[89,499,191],{"class":95},[89,501,462],{"class":158},[89,503,201],{"class":95},[89,505,506],{"class":158},"features",[89,508,201],{"class":95},[89,510,511],{"class":176},"find",[89,513,213],{"class":212},[89,515,213],{"class":95},[89,517,518],{"class":346},"f",[89,520,233],{"class":95},[89,522,524],{"class":523},"sIOqK"," =>",[89,526,527],{"class":158}," f",[89,529,201],{"class":95},[89,531,532],{"class":158},"properties",[89,534,201],{"class":95},[89,536,537],{"class":158},"shape",[89,539,540],{"class":194}," ===",[89,542,420],{"class":119},[89,544,545],{"class":123},"centroid",[89,547,120],{"class":119},[89,549,233],{"class":212},[89,551,162],{"class":95},[89,553,555],{"class":91,"line":554},13,[89,556,168],{"emptyLinePlaceholder":167},[89,558,560,563,566,569,571,573,576,579],{"class":91,"line":559},14,[89,561,562],{"class":364},"  if",[89,564,565],{"class":212}," (",[89,567,568],{"class":194},"!",[89,570,545],{"class":158},[89,572,233],{"class":212},[89,574,575],{"class":364}," return",[89,577,578],{"class":194}," null",[89,580,162],{"class":95},[89,582,584],{"class":91,"line":583},15,[89,585,168],{"emptyLinePlaceholder":167},[89,587,589,591,594,597,599,601,604,606,608,610,613,615,618],{"class":91,"line":588},16,[89,590,356],{"class":154},[89,592,593],{"class":95}," [",[89,595,596],{"class":158},"lng",[89,598,236],{"class":95},[89,600,254],{"class":158},[89,602,603],{"class":95},"]",[89,605,191],{"class":95},[89,607,497],{"class":158},[89,609,201],{"class":95},[89,611,612],{"class":158},"geometry",[89,614,201],{"class":95},[89,616,617],{"class":158},"coordinates",[89,619,162],{"class":95},[89,621,623],{"class":91,"line":622},17,[89,624,168],{"emptyLinePlaceholder":167},[89,626,628,630,633,635,637,639,641,643,645,648,650],{"class":91,"line":627},18,[89,629,356],{"class":154},[89,631,632],{"class":158}," marker",[89,634,191],{"class":95},[89,636,195],{"class":194},[89,638,198],{"class":158},[89,640,201],{"class":95},[89,642,204],{"class":158},[89,644,201],{"class":95},[89,646,647],{"class":176},"Marker",[89,649,213],{"class":212},[89,651,652],{"class":95},"{\n",[89,654,656,659,661,663,665,667,669],{"class":91,"line":655},19,[89,657,658],{"class":244},"    position",[89,660,248],{"class":95},[89,662,251],{"class":95},[89,664,254],{"class":158},[89,666,236],{"class":95},[89,668,265],{"class":158},[89,670,276],{"class":95},[89,672,674,677],{"class":91,"line":673},20,[89,675,676],{"class":158},"    map",[89,678,403],{"class":95},[89,680,682,685,687,689,691,693,695],{"class":91,"line":681},21,[89,683,684],{"class":244},"    title",[89,686,248],{"class":95},[89,688,497],{"class":158},[89,690,201],{"class":95},[89,692,532],{"class":158},[89,694,201],{"class":95},[89,696,697],{"class":158},"legal_location\n",[89,699,701,703,705],{"class":91,"line":700},22,[89,702,293],{"class":95},[89,704,233],{"class":212},[89,706,162],{"class":95},[89,708,710],{"class":91,"line":709},23,[89,711,168],{"emptyLinePlaceholder":167},[89,713,715,717,719,722,724,727,729,731,733,736,738],{"class":91,"line":714},24,[89,716,188],{"class":158},[89,718,201],{"class":95},[89,720,721],{"class":176},"panTo",[89,723,213],{"class":212},[89,725,726],{"class":95},"{",[89,728,254],{"class":158},[89,730,236],{"class":95},[89,732,265],{"class":158},[89,734,735],{"class":95}," }",[89,737,233],{"class":212},[89,739,162],{"class":95},[89,741,743,745,747,750,752,755,757],{"class":91,"line":742},25,[89,744,188],{"class":158},[89,746,201],{"class":95},[89,748,749],{"class":176},"setZoom",[89,751,213],{"class":212},[89,753,754],{"class":259},"13",[89,756,233],{"class":212},[89,758,162],{"class":95},[89,760,762],{"class":91,"line":761},26,[89,763,168],{"emptyLinePlaceholder":167},[89,765,767,770,772,774,776,778],{"class":91,"line":766},27,[89,768,769],{"class":364},"  return",[89,771,251],{"class":95},[89,773,632],{"class":158},[89,775,236],{"class":95},[89,777,462],{"class":158},[89,779,780],{"class":95}," };\n",[89,782,784],{"class":91,"line":783},28,[89,785,303],{"class":95},[15,787,788,789,792],{},"Call ",[19,790,791],{},"searchLocation(\"NW-25-24-1-W5\")"," and you'll see a pin land on the northwest quarter of Section 25, Township 24, Range 1, West of the 5th Meridian in Alberta.",[10,794,796],{"id":795},"step-3-draw-boundary-polygons","Step 3: Draw Boundary Polygons",[15,798,799,800,803],{},"Google Maps supports GeoJSON natively through ",[19,801,802],{},"google.maps.Data.addGeoJson()",". The search endpoint already returns the polygon alongside the centroid, so you can reuse the same response:",[80,805,807],{"className":145,"code":806,"language":147,"meta":85,"style":85},"function drawBoundary(geojson) {\n  \u002F\u002F Clear any previous boundaries\n  map.data.forEach((feature) => map.data.remove(feature));\n\n  \u002F\u002F Add the GeoJSON FeatureCollection directly\n  map.data.addGeoJson(geojson);\n\n  \u002F\u002F Style the polygon\n  map.data.setStyle({\n    fillColor: \"#1a6b3c\",\n    fillOpacity: 0.2,\n    strokeColor: \"#1a6b3c\",\n    strokeWeight: 2\n  });\n}\n",[19,808,809,825,830,875,879,884,905,909,914,931,947,959,974,984,992],{"__ignoreMap":85},[89,810,811,813,816,818,821,823],{"class":91,"line":92},[89,812,173],{"class":154},[89,814,815],{"class":176}," drawBoundary",[89,817,213],{"class":95},[89,819,820],{"class":346},"geojson",[89,822,233],{"class":95},[89,824,183],{"class":95},[89,826,827],{"class":91,"line":103},[89,828,829],{"class":488},"  \u002F\u002F Clear any previous boundaries\n",[89,831,832,834,836,839,841,844,846,848,851,853,855,857,859,861,863,866,868,870,873],{"class":91,"line":110},[89,833,188],{"class":158},[89,835,201],{"class":95},[89,837,838],{"class":158},"data",[89,840,201],{"class":95},[89,842,843],{"class":176},"forEach",[89,845,213],{"class":212},[89,847,213],{"class":95},[89,849,850],{"class":346},"feature",[89,852,233],{"class":95},[89,854,524],{"class":523},[89,856,159],{"class":158},[89,858,201],{"class":95},[89,860,838],{"class":158},[89,862,201],{"class":95},[89,864,865],{"class":176},"remove",[89,867,213],{"class":212},[89,869,850],{"class":158},[89,871,872],{"class":212},"))",[89,874,162],{"class":95},[89,876,877],{"class":91,"line":130},[89,878,168],{"emptyLinePlaceholder":167},[89,880,881],{"class":91,"line":241},[89,882,883],{"class":488},"  \u002F\u002F Add the GeoJSON FeatureCollection directly\n",[89,885,886,888,890,892,894,897,899,901,903],{"class":91,"line":279},[89,887,188],{"class":158},[89,889,201],{"class":95},[89,891,838],{"class":158},[89,893,201],{"class":95},[89,895,896],{"class":176},"addGeoJson",[89,898,213],{"class":212},[89,900,820],{"class":158},[89,902,233],{"class":212},[89,904,162],{"class":95},[89,906,907],{"class":91,"line":290},[89,908,168],{"emptyLinePlaceholder":167},[89,910,911],{"class":91,"line":300},[89,912,913],{"class":488},"  \u002F\u002F Style the polygon\n",[89,915,916,918,920,922,924,927,929],{"class":91,"line":457},[89,917,188],{"class":158},[89,919,201],{"class":95},[89,921,838],{"class":158},[89,923,201],{"class":95},[89,925,926],{"class":176},"setStyle",[89,928,213],{"class":212},[89,930,652],{"class":95},[89,932,933,936,938,940,943,945],{"class":91,"line":480},[89,934,935],{"class":244},"    fillColor",[89,937,248],{"class":95},[89,939,420],{"class":119},[89,941,942],{"class":123},"#1a6b3c",[89,944,120],{"class":119},[89,946,403],{"class":95},[89,948,949,952,954,957],{"class":91,"line":485},[89,950,951],{"class":244},"    fillOpacity",[89,953,248],{"class":95},[89,955,956],{"class":259}," 0.2",[89,958,403],{"class":95},[89,960,961,964,966,968,970,972],{"class":91,"line":492},[89,962,963],{"class":244},"    strokeColor",[89,965,248],{"class":95},[89,967,420],{"class":119},[89,969,942],{"class":123},[89,971,120],{"class":119},[89,973,403],{"class":95},[89,975,976,979,981],{"class":91,"line":554},[89,977,978],{"class":244},"    strokeWeight",[89,980,248],{"class":95},[89,982,983],{"class":259}," 2\n",[89,985,986,988,990],{"class":91,"line":559},[89,987,293],{"class":95},[89,989,233],{"class":212},[89,991,162],{"class":95},[89,993,994],{"class":91,"line":583},[89,995,303],{"class":95},[15,997,998],{},"If you want the polygon without the centroid marker - for example, to highlight multiple sections at once - use the dedicated boundary endpoint instead:",[80,1000,1002],{"className":145,"code":1001,"language":147,"meta":85,"style":85},"async function fetchBoundary(query) {\n  const response = await fetch(\n    `https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fboundary?location=${encodeURIComponent(query)}`,\n    {\n      headers: { \"X-API-Key\": \"YOUR_API_KEY\" }\n    }\n  );\n  return response.json();\n}\n",[19,1003,1004,1021,1035,1058,1062,1086,1090,1096,1110],{"__ignoreMap":85},[89,1005,1006,1008,1010,1013,1015,1017,1019],{"class":91,"line":92},[89,1007,335],{"class":154},[89,1009,338],{"class":154},[89,1011,1012],{"class":176}," fetchBoundary",[89,1014,213],{"class":95},[89,1016,347],{"class":346},[89,1018,233],{"class":95},[89,1020,183],{"class":95},[89,1022,1023,1025,1027,1029,1031,1033],{"class":91,"line":103},[89,1024,356],{"class":154},[89,1026,359],{"class":158},[89,1028,191],{"class":95},[89,1030,365],{"class":364},[89,1032,368],{"class":176},[89,1034,371],{"class":212},[89,1036,1037,1039,1042,1044,1046,1048,1050,1052,1054,1056],{"class":91,"line":110},[89,1038,376],{"class":119},[89,1040,1041],{"class":123},"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fboundary?location=",[89,1043,383],{"class":382},[89,1045,386],{"class":176},[89,1047,213],{"class":389},[89,1049,347],{"class":392},[89,1051,233],{"class":389},[89,1053,397],{"class":382},[89,1055,400],{"class":119},[89,1057,403],{"class":95},[89,1059,1060],{"class":91,"line":130},[89,1061,408],{"class":95},[89,1063,1064,1066,1068,1070,1072,1074,1076,1078,1080,1082,1084],{"class":91,"line":241},[89,1065,413],{"class":244},[89,1067,248],{"class":95},[89,1069,251],{"class":95},[89,1071,420],{"class":119},[89,1073,424],{"class":423},[89,1075,120],{"class":119},[89,1077,248],{"class":95},[89,1079,420],{"class":119},[89,1081,433],{"class":123},[89,1083,120],{"class":119},[89,1085,438],{"class":95},[89,1087,1088],{"class":91,"line":279},[89,1089,443],{"class":95},[89,1091,1092,1094],{"class":91,"line":290},[89,1093,448],{"class":212},[89,1095,162],{"class":95},[89,1097,1098,1100,1102,1104,1106,1108],{"class":91,"line":300},[89,1099,769],{"class":364},[89,1101,359],{"class":158},[89,1103,201],{"class":95},[89,1105,473],{"class":176},[89,1107,180],{"class":212},[89,1109,162],{"class":95},[89,1111,1112],{"class":91,"line":457},[89,1113,303],{"class":95},[15,1115,1116,1117,201],{},"This endpoint returns a GeoJSON polygon you can pass directly to ",[19,1118,1119],{},"map.data.addGeoJson()",[10,1121,1123],{"id":1122},"step-4-custom-infowindows-with-lld-details","Step 4: Custom InfoWindows with LLD Details",[15,1125,1126,1127,1129],{},"An InfoWindow tied to the marker gives users the section breakdown at a glance. Pull the property details from the polygon feature's ",[19,1128,532],{}," object:",[80,1131,1133],{"className":145,"code":1132,"language":147,"meta":85,"style":85},"function attachInfoWindow(marker, geojson) {\n  const polygon = geojson.features.find((f) => f.geometry.type === \"MultiPolygon\");\n\n  if (!polygon) return;\n\n  const p = polygon.properties;\n\n  const content = `\n    \u003Cdiv style=\"font-family: sans-serif; padding: 4px 8px;\">\n      \u003Cstrong>${p.legal_location}\u003C\u002Fstrong>\u003Cbr>\n      Quarter: ${p.quarter_section}\u003Cbr>\n      Section: ${p.section}\u003Cbr>\n      Township: ${p.township}\u003Cbr>\n      Range: ${p.range} ${p.meridian}\u003Cbr>\n      Province: ${p.province}\n    \u003C\u002Fdiv>\n  `;\n\n  const infoWindow = new google.maps.InfoWindow({ content });\n\n  marker.addListener(\"click\", () => {\n    infoWindow.open(map, marker);\n  });\n}\n",[19,1134,1135,1156,1208,1212,1229,1233,1250,1254,1266,1271,1290,1309,1327,1345,1375,1391,1396,1403,1407,1441,1445,1473,1495,1503],{"__ignoreMap":85},[89,1136,1137,1139,1142,1144,1147,1149,1152,1154],{"class":91,"line":92},[89,1138,173],{"class":154},[89,1140,1141],{"class":176}," attachInfoWindow",[89,1143,213],{"class":95},[89,1145,1146],{"class":346},"marker",[89,1148,236],{"class":95},[89,1150,1151],{"class":346}," geojson",[89,1153,233],{"class":95},[89,1155,183],{"class":95},[89,1157,1158,1160,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1196,1198,1200,1202,1204,1206],{"class":91,"line":103},[89,1159,356],{"class":154},[89,1161,1162],{"class":158}," polygon",[89,1164,191],{"class":95},[89,1166,1151],{"class":158},[89,1168,201],{"class":95},[89,1170,506],{"class":158},[89,1172,201],{"class":95},[89,1174,511],{"class":176},[89,1176,213],{"class":212},[89,1178,213],{"class":95},[89,1180,518],{"class":346},[89,1182,233],{"class":95},[89,1184,524],{"class":523},[89,1186,527],{"class":158},[89,1188,201],{"class":95},[89,1190,612],{"class":158},[89,1192,201],{"class":95},[89,1194,1195],{"class":158},"type",[89,1197,540],{"class":194},[89,1199,420],{"class":119},[89,1201,317],{"class":123},[89,1203,120],{"class":119},[89,1205,233],{"class":212},[89,1207,162],{"class":95},[89,1209,1210],{"class":91,"line":110},[89,1211,168],{"emptyLinePlaceholder":167},[89,1213,1214,1216,1218,1220,1223,1225,1227],{"class":91,"line":130},[89,1215,562],{"class":364},[89,1217,565],{"class":212},[89,1219,568],{"class":194},[89,1221,1222],{"class":158},"polygon",[89,1224,233],{"class":212},[89,1226,575],{"class":364},[89,1228,162],{"class":95},[89,1230,1231],{"class":91,"line":241},[89,1232,168],{"emptyLinePlaceholder":167},[89,1234,1235,1237,1240,1242,1244,1246,1248],{"class":91,"line":279},[89,1236,356],{"class":154},[89,1238,1239],{"class":158}," p",[89,1241,191],{"class":95},[89,1243,1162],{"class":158},[89,1245,201],{"class":95},[89,1247,532],{"class":158},[89,1249,162],{"class":95},[89,1251,1252],{"class":91,"line":290},[89,1253,168],{"emptyLinePlaceholder":167},[89,1255,1256,1258,1261,1263],{"class":91,"line":300},[89,1257,356],{"class":154},[89,1259,1260],{"class":158}," content",[89,1262,191],{"class":95},[89,1264,1265],{"class":119}," `\n",[89,1267,1268],{"class":91,"line":457},[89,1269,1270],{"class":123},"    \u003Cdiv style=\"font-family: sans-serif; padding: 4px 8px;\">\n",[89,1272,1273,1276,1278,1280,1282,1285,1287],{"class":91,"line":480},[89,1274,1275],{"class":123},"      \u003Cstrong>",[89,1277,383],{"class":382},[89,1279,15],{"class":392},[89,1281,201],{"class":95},[89,1283,1284],{"class":392},"legal_location",[89,1286,397],{"class":382},[89,1288,1289],{"class":123},"\u003C\u002Fstrong>\u003Cbr>\n",[89,1291,1292,1295,1297,1299,1301,1304,1306],{"class":91,"line":485},[89,1293,1294],{"class":123},"      Quarter: ",[89,1296,383],{"class":382},[89,1298,15],{"class":392},[89,1300,201],{"class":95},[89,1302,1303],{"class":392},"quarter_section",[89,1305,397],{"class":382},[89,1307,1308],{"class":123},"\u003Cbr>\n",[89,1310,1311,1314,1316,1318,1320,1323,1325],{"class":91,"line":492},[89,1312,1313],{"class":123},"      Section: ",[89,1315,383],{"class":382},[89,1317,15],{"class":392},[89,1319,201],{"class":95},[89,1321,1322],{"class":392},"section",[89,1324,397],{"class":382},[89,1326,1308],{"class":123},[89,1328,1329,1332,1334,1336,1338,1341,1343],{"class":91,"line":554},[89,1330,1331],{"class":123},"      Township: ",[89,1333,383],{"class":382},[89,1335,15],{"class":392},[89,1337,201],{"class":95},[89,1339,1340],{"class":392},"township",[89,1342,397],{"class":382},[89,1344,1308],{"class":123},[89,1346,1347,1350,1352,1354,1356,1359,1361,1364,1366,1368,1371,1373],{"class":91,"line":559},[89,1348,1349],{"class":123},"      Range: ",[89,1351,383],{"class":382},[89,1353,15],{"class":392},[89,1355,201],{"class":95},[89,1357,1358],{"class":392},"range",[89,1360,397],{"class":382},[89,1362,1363],{"class":382}," ${",[89,1365,15],{"class":392},[89,1367,201],{"class":95},[89,1369,1370],{"class":392},"meridian",[89,1372,397],{"class":382},[89,1374,1308],{"class":123},[89,1376,1377,1380,1382,1384,1386,1389],{"class":91,"line":583},[89,1378,1379],{"class":123},"      Province: ",[89,1381,383],{"class":382},[89,1383,15],{"class":392},[89,1385,201],{"class":95},[89,1387,1388],{"class":392},"province",[89,1390,303],{"class":382},[89,1392,1393],{"class":91,"line":588},[89,1394,1395],{"class":123},"    \u003C\u002Fdiv>\n",[89,1397,1398,1401],{"class":91,"line":622},[89,1399,1400],{"class":119},"  `",[89,1402,162],{"class":95},[89,1404,1405],{"class":91,"line":627},[89,1406,168],{"emptyLinePlaceholder":167},[89,1408,1409,1411,1414,1416,1418,1420,1422,1424,1426,1429,1431,1433,1435,1437,1439],{"class":91,"line":655},[89,1410,356],{"class":154},[89,1412,1413],{"class":158}," infoWindow",[89,1415,191],{"class":95},[89,1417,195],{"class":194},[89,1419,198],{"class":158},[89,1421,201],{"class":95},[89,1423,204],{"class":158},[89,1425,201],{"class":95},[89,1427,1428],{"class":176},"InfoWindow",[89,1430,213],{"class":212},[89,1432,726],{"class":95},[89,1434,1260],{"class":158},[89,1436,735],{"class":95},[89,1438,233],{"class":212},[89,1440,162],{"class":95},[89,1442,1443],{"class":91,"line":673},[89,1444,168],{"emptyLinePlaceholder":167},[89,1446,1447,1450,1452,1455,1457,1459,1462,1464,1466,1469,1471],{"class":91,"line":681},[89,1448,1449],{"class":158},"  marker",[89,1451,201],{"class":95},[89,1453,1454],{"class":176},"addListener",[89,1456,213],{"class":212},[89,1458,120],{"class":119},[89,1460,1461],{"class":123},"click",[89,1463,120],{"class":119},[89,1465,236],{"class":95},[89,1467,1468],{"class":95}," ()",[89,1470,524],{"class":523},[89,1472,183],{"class":95},[89,1474,1475,1478,1480,1483,1485,1487,1489,1491,1493],{"class":91,"line":700},[89,1476,1477],{"class":158},"    infoWindow",[89,1479,201],{"class":95},[89,1481,1482],{"class":176},"open",[89,1484,213],{"class":212},[89,1486,228],{"class":158},[89,1488,236],{"class":95},[89,1490,632],{"class":158},[89,1492,233],{"class":212},[89,1494,162],{"class":95},[89,1496,1497,1499,1501],{"class":91,"line":709},[89,1498,293],{"class":95},[89,1500,233],{"class":212},[89,1502,162],{"class":95},[89,1504,1505],{"class":91,"line":714},[89,1506,303],{"class":95},[10,1508,1510],{"id":1509},"step-5-autocomplete-search-box","Step 5: Autocomplete Search Box",[15,1512,1513,1514,1517,1518,1521],{},"The autocomplete endpoint returns up to 10 matching legal land descriptions (default 3) as the user types. Wire it to an ",[19,1515,1516],{},"\u003Cinput>"," with a simple ",[19,1519,1520],{},"input"," event listener and a results dropdown:",[80,1523,1525],{"className":145,"code":1524,"language":147,"meta":85,"style":85},"const input = document.getElementById(\"search-input\");\nconst suggestions = document.getElementById(\"suggestions\");\n\ninput.addEventListener(\"input\", async () => {\n  const query = input.value.trim();\n  if (query.length \u003C 3) {\n    suggestions.innerHTML = \"\";\n    return;\n  }\n\n  const response = await fetch(\n    `https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fautocomplete\u002Flegal-location?location=${encodeURIComponent(query)}&limit=3`,\n    {\n      headers: { \"X-API-Key\": \"YOUR_API_KEY\" }\n    }\n  );\n\n  const data = await response.json();\n  suggestions.innerHTML = \"\";\n\n  data.features.forEach((feature) => {\n    const lld = feature.properties.legal_location;\n    const li = document.createElement(\"li\");\n    li.textContent = lld;\n    li.style.cursor = \"pointer\";\n    li.style.padding = \"6px 12px\";\n\n    li.addEventListener(\"click\", async () => {\n      input.value = lld;\n      suggestions.innerHTML = \"\";\n\n      const { marker, data } = await searchLocation(lld);\n      drawBoundary(data);\n      attachInfoWindow(marker, data);\n    });\n\n    suggestions.appendChild(li);\n  });\n});\n",[19,1526,1527,1557,1585,1589,1617,1642,1666,1683,1690,1695,1699,1713,1739,1743,1767,1771,1777,1781,1801,1816,1820,1845,1868,1896,1912,1937,1961,1965,1991,2007,2023,2028,2059,2073,2091,2101,2106,2124,2133],{"__ignoreMap":85},[89,1528,1529,1532,1535,1537,1540,1542,1544,1546,1548,1551,1553,1555],{"class":91,"line":92},[89,1530,1531],{"class":154},"const",[89,1533,1534],{"class":158}," input",[89,1536,191],{"class":95},[89,1538,1539],{"class":158}," document",[89,1541,201],{"class":95},[89,1543,221],{"class":176},[89,1545,213],{"class":389},[89,1547,120],{"class":119},[89,1549,1550],{"class":123},"search-input",[89,1552,120],{"class":119},[89,1554,233],{"class":389},[89,1556,162],{"class":95},[89,1558,1559,1561,1564,1566,1568,1570,1572,1574,1576,1579,1581,1583],{"class":91,"line":103},[89,1560,1531],{"class":154},[89,1562,1563],{"class":158}," suggestions",[89,1565,191],{"class":95},[89,1567,1539],{"class":158},[89,1569,201],{"class":95},[89,1571,221],{"class":176},[89,1573,213],{"class":389},[89,1575,120],{"class":119},[89,1577,1578],{"class":123},"suggestions",[89,1580,120],{"class":119},[89,1582,233],{"class":389},[89,1584,162],{"class":95},[89,1586,1587],{"class":91,"line":110},[89,1588,168],{"emptyLinePlaceholder":167},[89,1590,1591,1593,1595,1598,1600,1602,1604,1606,1608,1611,1613,1615],{"class":91,"line":130},[89,1592,1520],{"class":158},[89,1594,201],{"class":95},[89,1596,1597],{"class":176},"addEventListener",[89,1599,213],{"class":389},[89,1601,120],{"class":119},[89,1603,1520],{"class":123},[89,1605,120],{"class":119},[89,1607,236],{"class":95},[89,1609,1610],{"class":154}," async",[89,1612,1468],{"class":95},[89,1614,524],{"class":523},[89,1616,183],{"class":95},[89,1618,1619,1621,1624,1626,1628,1630,1633,1635,1638,1640],{"class":91,"line":241},[89,1620,356],{"class":154},[89,1622,1623],{"class":158}," query",[89,1625,191],{"class":95},[89,1627,1534],{"class":158},[89,1629,201],{"class":95},[89,1631,1632],{"class":158},"value",[89,1634,201],{"class":95},[89,1636,1637],{"class":176},"trim",[89,1639,180],{"class":212},[89,1641,162],{"class":95},[89,1643,1644,1646,1648,1650,1652,1656,1659,1662,1664],{"class":91,"line":279},[89,1645,562],{"class":364},[89,1647,565],{"class":212},[89,1649,347],{"class":158},[89,1651,201],{"class":95},[89,1653,1655],{"class":1654},"s131V","length",[89,1657,1658],{"class":95}," \u003C",[89,1660,1661],{"class":259}," 3",[89,1663,233],{"class":212},[89,1665,183],{"class":95},[89,1667,1668,1671,1673,1676,1678,1681],{"class":91,"line":290},[89,1669,1670],{"class":158},"    suggestions",[89,1672,201],{"class":95},[89,1674,1675],{"class":158},"innerHTML",[89,1677,191],{"class":95},[89,1679,1680],{"class":119}," \"\"",[89,1682,162],{"class":95},[89,1684,1685,1688],{"class":91,"line":300},[89,1686,1687],{"class":364},"    return",[89,1689,162],{"class":95},[89,1691,1692],{"class":91,"line":457},[89,1693,1694],{"class":95},"  }\n",[89,1696,1697],{"class":91,"line":480},[89,1698,168],{"emptyLinePlaceholder":167},[89,1700,1701,1703,1705,1707,1709,1711],{"class":91,"line":485},[89,1702,356],{"class":154},[89,1704,359],{"class":158},[89,1706,191],{"class":95},[89,1708,365],{"class":364},[89,1710,368],{"class":176},[89,1712,371],{"class":212},[89,1714,1715,1717,1720,1722,1724,1726,1728,1730,1732,1735,1737],{"class":91,"line":492},[89,1716,376],{"class":119},[89,1718,1719],{"class":123},"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fautocomplete\u002Flegal-location?location=",[89,1721,383],{"class":382},[89,1723,386],{"class":176},[89,1725,213],{"class":389},[89,1727,347],{"class":392},[89,1729,233],{"class":389},[89,1731,397],{"class":382},[89,1733,1734],{"class":123},"&limit=3",[89,1736,400],{"class":119},[89,1738,403],{"class":95},[89,1740,1741],{"class":91,"line":554},[89,1742,408],{"class":95},[89,1744,1745,1747,1749,1751,1753,1755,1757,1759,1761,1763,1765],{"class":91,"line":559},[89,1746,413],{"class":244},[89,1748,248],{"class":95},[89,1750,251],{"class":95},[89,1752,420],{"class":119},[89,1754,424],{"class":423},[89,1756,120],{"class":119},[89,1758,248],{"class":95},[89,1760,420],{"class":119},[89,1762,433],{"class":123},[89,1764,120],{"class":119},[89,1766,438],{"class":95},[89,1768,1769],{"class":91,"line":583},[89,1770,443],{"class":95},[89,1772,1773,1775],{"class":91,"line":588},[89,1774,448],{"class":212},[89,1776,162],{"class":95},[89,1778,1779],{"class":91,"line":622},[89,1780,168],{"emptyLinePlaceholder":167},[89,1782,1783,1785,1787,1789,1791,1793,1795,1797,1799],{"class":91,"line":627},[89,1784,356],{"class":154},[89,1786,462],{"class":158},[89,1788,191],{"class":95},[89,1790,365],{"class":364},[89,1792,359],{"class":158},[89,1794,201],{"class":95},[89,1796,473],{"class":176},[89,1798,180],{"class":212},[89,1800,162],{"class":95},[89,1802,1803,1806,1808,1810,1812,1814],{"class":91,"line":655},[89,1804,1805],{"class":158},"  suggestions",[89,1807,201],{"class":95},[89,1809,1675],{"class":158},[89,1811,191],{"class":95},[89,1813,1680],{"class":119},[89,1815,162],{"class":95},[89,1817,1818],{"class":91,"line":673},[89,1819,168],{"emptyLinePlaceholder":167},[89,1821,1822,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843],{"class":91,"line":681},[89,1823,1824],{"class":158},"  data",[89,1826,201],{"class":95},[89,1828,506],{"class":158},[89,1830,201],{"class":95},[89,1832,843],{"class":176},[89,1834,213],{"class":212},[89,1836,213],{"class":95},[89,1838,850],{"class":346},[89,1840,233],{"class":95},[89,1842,524],{"class":523},[89,1844,183],{"class":95},[89,1846,1847,1850,1853,1855,1858,1860,1862,1864,1866],{"class":91,"line":700},[89,1848,1849],{"class":154},"    const",[89,1851,1852],{"class":158}," lld",[89,1854,191],{"class":95},[89,1856,1857],{"class":158}," feature",[89,1859,201],{"class":95},[89,1861,532],{"class":158},[89,1863,201],{"class":95},[89,1865,1284],{"class":158},[89,1867,162],{"class":95},[89,1869,1870,1872,1875,1877,1879,1881,1884,1886,1888,1890,1892,1894],{"class":91,"line":709},[89,1871,1849],{"class":154},[89,1873,1874],{"class":158}," li",[89,1876,191],{"class":95},[89,1878,1539],{"class":158},[89,1880,201],{"class":95},[89,1882,1883],{"class":176},"createElement",[89,1885,213],{"class":212},[89,1887,120],{"class":119},[89,1889,38],{"class":123},[89,1891,120],{"class":119},[89,1893,233],{"class":212},[89,1895,162],{"class":95},[89,1897,1898,1901,1903,1906,1908,1910],{"class":91,"line":714},[89,1899,1900],{"class":158},"    li",[89,1902,201],{"class":95},[89,1904,1905],{"class":158},"textContent",[89,1907,191],{"class":95},[89,1909,1852],{"class":158},[89,1911,162],{"class":95},[89,1913,1914,1916,1918,1921,1923,1926,1928,1930,1933,1935],{"class":91,"line":742},[89,1915,1900],{"class":158},[89,1917,201],{"class":95},[89,1919,1920],{"class":158},"style",[89,1922,201],{"class":95},[89,1924,1925],{"class":158},"cursor",[89,1927,191],{"class":95},[89,1929,420],{"class":119},[89,1931,1932],{"class":123},"pointer",[89,1934,120],{"class":119},[89,1936,162],{"class":95},[89,1938,1939,1941,1943,1945,1947,1950,1952,1954,1957,1959],{"class":91,"line":761},[89,1940,1900],{"class":158},[89,1942,201],{"class":95},[89,1944,1920],{"class":158},[89,1946,201],{"class":95},[89,1948,1949],{"class":158},"padding",[89,1951,191],{"class":95},[89,1953,420],{"class":119},[89,1955,1956],{"class":123},"6px 12px",[89,1958,120],{"class":119},[89,1960,162],{"class":95},[89,1962,1963],{"class":91,"line":766},[89,1964,168],{"emptyLinePlaceholder":167},[89,1966,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989],{"class":91,"line":783},[89,1968,1900],{"class":158},[89,1970,201],{"class":95},[89,1972,1597],{"class":176},[89,1974,213],{"class":212},[89,1976,120],{"class":119},[89,1978,1461],{"class":123},[89,1980,120],{"class":119},[89,1982,236],{"class":95},[89,1984,1610],{"class":154},[89,1986,1468],{"class":95},[89,1988,524],{"class":523},[89,1990,183],{"class":95},[89,1992,1994,1997,1999,2001,2003,2005],{"class":91,"line":1993},29,[89,1995,1996],{"class":158},"      input",[89,1998,201],{"class":95},[89,2000,1632],{"class":158},[89,2002,191],{"class":95},[89,2004,1852],{"class":158},[89,2006,162],{"class":95},[89,2008,2010,2013,2015,2017,2019,2021],{"class":91,"line":2009},30,[89,2011,2012],{"class":158},"      suggestions",[89,2014,201],{"class":95},[89,2016,1675],{"class":158},[89,2018,191],{"class":95},[89,2020,1680],{"class":119},[89,2022,162],{"class":95},[89,2024,2026],{"class":91,"line":2025},31,[89,2027,168],{"emptyLinePlaceholder":167},[89,2029,2031,2034,2036,2038,2040,2042,2044,2046,2048,2050,2052,2055,2057],{"class":91,"line":2030},32,[89,2032,2033],{"class":154},"      const",[89,2035,251],{"class":95},[89,2037,632],{"class":158},[89,2039,236],{"class":95},[89,2041,462],{"class":158},[89,2043,735],{"class":95},[89,2045,191],{"class":95},[89,2047,365],{"class":364},[89,2049,341],{"class":176},[89,2051,213],{"class":212},[89,2053,2054],{"class":158},"lld",[89,2056,233],{"class":212},[89,2058,162],{"class":95},[89,2060,2062,2065,2067,2069,2071],{"class":91,"line":2061},33,[89,2063,2064],{"class":176},"      drawBoundary",[89,2066,213],{"class":212},[89,2068,838],{"class":158},[89,2070,233],{"class":212},[89,2072,162],{"class":95},[89,2074,2076,2079,2081,2083,2085,2087,2089],{"class":91,"line":2075},34,[89,2077,2078],{"class":176},"      attachInfoWindow",[89,2080,213],{"class":212},[89,2082,1146],{"class":158},[89,2084,236],{"class":95},[89,2086,462],{"class":158},[89,2088,233],{"class":212},[89,2090,162],{"class":95},[89,2092,2094,2097,2099],{"class":91,"line":2093},35,[89,2095,2096],{"class":95},"    }",[89,2098,233],{"class":212},[89,2100,162],{"class":95},[89,2102,2104],{"class":91,"line":2103},36,[89,2105,168],{"emptyLinePlaceholder":167},[89,2107,2109,2111,2113,2116,2118,2120,2122],{"class":91,"line":2108},37,[89,2110,1670],{"class":158},[89,2112,201],{"class":95},[89,2114,2115],{"class":176},"appendChild",[89,2117,213],{"class":212},[89,2119,38],{"class":158},[89,2121,233],{"class":212},[89,2123,162],{"class":95},[89,2125,2127,2129,2131],{"class":91,"line":2126},38,[89,2128,293],{"class":95},[89,2130,233],{"class":212},[89,2132,162],{"class":95},[89,2134,2136,2138,2140],{"class":91,"line":2135},39,[89,2137,397],{"class":95},[89,2139,233],{"class":389},[89,2141,162],{"class":95},[15,2143,2144,2145,201],{},"For more on the autocomplete endpoint's parameters and response shape, see the ",[42,2146,2148],{"href":2147},"\u002Fguides\u002Fautocomplete-api-guide","Autocomplete API guide",[15,2150,2151,2154,2155,2158,2159,201],{},[50,2152,2153],{},"Note on vector tiles:"," Google Maps does not natively support Mapbox Vector Tile (MVT) format, so the Township Canada vector tile endpoint (",[19,2156,2157],{},"https:\u002F\u002Fmaps.townshipcanada.com\u002F{province}\u002F{layer}\u002F{z}\u002F{x}\u002F{y}.mvt",") is not compatible with the Google Maps JavaScript API without a third-party renderer. For server-side or API-driven use cases, stick with the search and boundary endpoints shown above. If you need vector tile support, see the ",[42,2160,2162],{"href":2161},"\u002Fguides\u002Fmapbox-integration","Mapbox integration guide",[10,2164,2166],{"id":2165},"full-working-example","Full Working Example",[15,2168,2169,2170,2173],{},"Copy this into a single ",[19,2171,2172],{},".html"," file, replace the two API key placeholders, and open it in a browser:",[80,2175,2177],{"className":82,"code":2176,"language":84,"meta":85,"style":85},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n  \u003Chead>\n    \u003Cmeta charset=\"UTF-8\" \u002F>\n    \u003Ctitle>Township Canada + Google Maps\u003C\u002Ftitle>\n    \u003Cstyle>\n      body {\n        margin: 0;\n        font-family: sans-serif;\n      }\n      #controls {\n        position: absolute;\n        top: 10px;\n        left: 10px;\n        z-index: 5;\n        background: white;\n        padding: 8px;\n        border-radius: 4px;\n        box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\n      }\n      #search-input {\n        width: 240px;\n        padding: 6px 10px;\n        font-size: 14px;\n        border: 1px solid #ccc;\n        border-radius: 4px;\n      }\n      #suggestions {\n        list-style: none;\n        margin: 4px 0 0;\n        padding: 0;\n        background: white;\n        border: 1px solid #ccc;\n        border-radius: 4px;\n        max-height: 160px;\n        overflow-y: auto;\n      }\n      #suggestions li:hover {\n        background: #f0f0f0;\n      }\n      #map {\n        width: 100vw;\n        height: 100vh;\n      }\n    \u003C\u002Fstyle>\n  \u003C\u002Fhead>\n  \u003Cbody>\n    \u003Cdiv id=\"controls\">\n      \u003Cinput\n        id=\"search-input\"\n        type=\"text\"\n        placeholder=\"e.g. NW-25-24-1-W5\"\n      \u002F>\n      \u003Cul id=\"suggestions\">\u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv id=\"map\">\u003C\u002Fdiv>\n\n    \u003Cscript>\n      const TC_API_KEY = \"YOUR_API_KEY\";\n      let map;\n\n      function initMap() {\n        map = new google.maps.Map(document.getElementById(\"map\"), {\n          center: { lat: 53.5, lng: -113.5 },\n          zoom: 10\n        });\n\n        const input = document.getElementById(\"search-input\");\n        const suggestions = document.getElementById(\"suggestions\");\n\n        input.addEventListener(\"input\", async () => {\n          const query = input.value.trim();\n          if (query.length \u003C 3) {\n            suggestions.innerHTML = \"\";\n            return;\n          }\n\n          const res = await fetch(\n            `https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fautocomplete\u002Flegal-location?location=${encodeURIComponent(query)}&limit=3`,\n            { headers: { \"X-API-Key\": TC_API_KEY } }\n          );\n          const data = await res.json();\n          suggestions.innerHTML = \"\";\n\n          data.features.forEach((feature) => {\n            const lld = feature.properties.legal_location;\n            const li = document.createElement(\"li\");\n            li.textContent = lld;\n            li.style.cursor = \"pointer\";\n            li.style.padding = \"6px 12px\";\n            li.addEventListener(\"click\", async () => {\n              input.value = lld;\n              suggestions.innerHTML = \"\";\n              await loadLocation(lld);\n            });\n            suggestions.appendChild(li);\n          });\n        });\n      }\n\n      async function loadLocation(query) {\n        const res = await fetch(\n          `https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?location=${encodeURIComponent(query)}`,\n          { headers: { \"X-API-Key\": TC_API_KEY } }\n        );\n        const data = await res.json();\n\n        const centroid = data.features.find((f) => f.properties.shape === \"centroid\");\n        const polygon = data.features.find((f) => f.geometry.type === \"MultiPolygon\");\n\n        if (!centroid) return;\n\n        const [lng, lat] = centroid.geometry.coordinates;\n        map.panTo({ lat, lng });\n        map.setZoom(13);\n\n        map.data.forEach((f) => map.data.remove(f));\n        map.data.addGeoJson(data);\n        map.data.setStyle({\n          fillColor: \"#1a6b3c\",\n          fillOpacity: 0.2,\n          strokeColor: \"#1a6b3c\",\n          strokeWeight: 2\n        });\n\n        const marker = new google.maps.Marker({\n          position: { lat, lng },\n          map,\n          title: centroid.properties.legal_location\n        });\n\n        if (polygon) {\n          const p = polygon.properties;\n          const infoWindow = new google.maps.InfoWindow({\n            content: `\u003Cdiv style=\"padding:4px 8px\">\u003Cstrong>${p.legal_location}\u003C\u002Fstrong>\u003Cbr>Quarter: ${p.quarter_section}\u003Cbr>Section: ${p.section} | Township: ${p.township}\u003Cbr>Range: ${p.range} ${p.meridian} | ${p.province}\u003C\u002Fdiv>`\n          });\n          marker.addListener(\"click\", () => infoWindow.open(map, marker));\n        }\n      }\n    \u003C\u002Fscript>\n\n    \u003Cscript\n      async\n      src=\"https:\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs?key=YOUR_GMAPS_KEY&callback=initMap\"\n    >\u003C\u002Fscript>\n  \u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[19,2178,2179,2192,2212,2222,2245,2266,2274,2282,2295,2308,2313,2324,2336,2352,2365,2377,2389,2403,2417,2460,2464,2472,2486,2502,2516,2539,2551,2555,2563,2575,2591,2601,2611,2629,2641,2655,2667,2671,2686,2699,2704,2713,2728,2743,2748,2758,2768,2778,2799,2808,2822,2837,2852,2858,2881,2890,2913,2918,2927,2945,2955,2960,2972,3014,3042,3052,3062,3067,3095,3122,3127,3155,3179,3201,3217,3225,3231,3236,3252,3278,3305,3313,3334,3350,3355,3381,3403,3430,3446,3469,3492,3519,3535,3551,3568,3578,3595,3605,3614,3619,3624,3642,3657,3681,3707,3715,3736,3741,3792,3843,3848,3866,3871,3900,3925,3942,3947,3988,4009,4026,4042,4054,4070,4080,4089,4094,4119,4137,4145,4163,4172,4177,4190,4207,4232,4337,4346,4388,4394,4399,4408,4413,4420,4426,4440,4450,4459],{"__ignoreMap":85},[89,2180,2181,2184,2187,2190],{"class":91,"line":92},[89,2182,2183],{"class":95},"\u003C!",[89,2185,2186],{"class":99},"DOCTYPE",[89,2188,2189],{"class":106}," html",[89,2191,139],{"class":95},[89,2193,2194,2196,2198,2201,2203,2205,2208,2210],{"class":91,"line":103},[89,2195,96],{"class":95},[89,2197,84],{"class":99},[89,2199,2200],{"class":106}," lang",[89,2202,116],{"class":95},[89,2204,120],{"class":119},[89,2206,2207],{"class":123},"en",[89,2209,120],{"class":119},[89,2211,139],{"class":95},[89,2213,2214,2217,2220],{"class":91,"line":110},[89,2215,2216],{"class":95},"  \u003C",[89,2218,2219],{"class":99},"head",[89,2221,139],{"class":95},[89,2223,2224,2227,2230,2233,2235,2237,2240,2242],{"class":91,"line":130},[89,2225,2226],{"class":95},"    \u003C",[89,2228,2229],{"class":99},"meta",[89,2231,2232],{"class":106}," charset",[89,2234,116],{"class":95},[89,2236,120],{"class":119},[89,2238,2239],{"class":123},"UTF-8",[89,2241,120],{"class":119},[89,2243,2244],{"class":95}," \u002F>\n",[89,2246,2247,2249,2252,2255,2259,2262,2264],{"class":91,"line":241},[89,2248,2226],{"class":95},[89,2250,2251],{"class":99},"title",[89,2253,2254],{"class":95},">",[89,2256,2258],{"class":2257},"sftqT","Township Canada + Google Maps",[89,2260,2261],{"class":95},"\u003C\u002F",[89,2263,2251],{"class":99},[89,2265,139],{"class":95},[89,2267,2268,2270,2272],{"class":91,"line":279},[89,2269,2226],{"class":95},[89,2271,1920],{"class":99},[89,2273,139],{"class":95},[89,2275,2276,2280],{"class":91,"line":290},[89,2277,2279],{"class":2278},"skzw8","      body",[89,2281,183],{"class":95},[89,2283,2284,2288,2290,2293],{"class":91,"line":300},[89,2285,2287],{"class":2286},"s5HLA","        margin",[89,2289,248],{"class":95},[89,2291,2292],{"class":259}," 0",[89,2294,162],{"class":95},[89,2296,2297,2300,2302,2306],{"class":91,"line":457},[89,2298,2299],{"class":2286},"        font-family",[89,2301,248],{"class":95},[89,2303,2305],{"class":2304},"se3Ec"," sans-serif",[89,2307,162],{"class":95},[89,2309,2310],{"class":91,"line":480},[89,2311,2312],{"class":95},"      }\n",[89,2314,2315,2318,2322],{"class":91,"line":485},[89,2316,2317],{"class":95},"      #",[89,2319,2321],{"class":2320},"sAntY","controls",[89,2323,183],{"class":95},[89,2325,2326,2329,2331,2334],{"class":91,"line":492},[89,2327,2328],{"class":2286},"        position",[89,2330,248],{"class":95},[89,2332,2333],{"class":2304}," absolute",[89,2335,162],{"class":95},[89,2337,2338,2341,2343,2346,2350],{"class":91,"line":554},[89,2339,2340],{"class":2286},"        top",[89,2342,248],{"class":95},[89,2344,2345],{"class":259}," 10",[89,2347,2349],{"class":2348},"sQBxk","px",[89,2351,162],{"class":95},[89,2353,2354,2357,2359,2361,2363],{"class":91,"line":559},[89,2355,2356],{"class":2286},"        left",[89,2358,248],{"class":95},[89,2360,2345],{"class":259},[89,2362,2349],{"class":2348},[89,2364,162],{"class":95},[89,2366,2367,2370,2372,2375],{"class":91,"line":583},[89,2368,2369],{"class":2286},"        z-index",[89,2371,248],{"class":95},[89,2373,2374],{"class":259}," 5",[89,2376,162],{"class":95},[89,2378,2379,2382,2384,2387],{"class":91,"line":588},[89,2380,2381],{"class":2286},"        background",[89,2383,248],{"class":95},[89,2385,2386],{"class":2304}," white",[89,2388,162],{"class":95},[89,2390,2391,2394,2396,2399,2401],{"class":91,"line":622},[89,2392,2393],{"class":2286},"        padding",[89,2395,248],{"class":95},[89,2397,2398],{"class":259}," 8",[89,2400,2349],{"class":2348},[89,2402,162],{"class":95},[89,2404,2405,2408,2410,2413,2415],{"class":91,"line":627},[89,2406,2407],{"class":2286},"        border-radius",[89,2409,248],{"class":95},[89,2411,2412],{"class":259}," 4",[89,2414,2349],{"class":2348},[89,2416,162],{"class":95},[89,2418,2419,2422,2424,2426,2429,2431,2434,2436,2440,2442,2445,2447,2449,2451,2453,2455,2457],{"class":91,"line":655},[89,2420,2421],{"class":2286},"        box-shadow",[89,2423,248],{"class":95},[89,2425,2292],{"class":259},[89,2427,2428],{"class":259}," 2",[89,2430,2349],{"class":2348},[89,2432,2433],{"class":259}," 6",[89,2435,2349],{"class":2348},[89,2437,2439],{"class":2438},"sJdAF"," rgba",[89,2441,213],{"class":95},[89,2443,2444],{"class":259},"0",[89,2446,236],{"class":95},[89,2448,2292],{"class":259},[89,2450,236],{"class":95},[89,2452,2292],{"class":259},[89,2454,236],{"class":95},[89,2456,956],{"class":259},[89,2458,2459],{"class":95},");\n",[89,2461,2462],{"class":91,"line":673},[89,2463,2312],{"class":95},[89,2465,2466,2468,2470],{"class":91,"line":681},[89,2467,2317],{"class":95},[89,2469,1550],{"class":2320},[89,2471,183],{"class":95},[89,2473,2474,2477,2479,2482,2484],{"class":91,"line":700},[89,2475,2476],{"class":2286},"        width",[89,2478,248],{"class":95},[89,2480,2481],{"class":259}," 240",[89,2483,2349],{"class":2348},[89,2485,162],{"class":95},[89,2487,2488,2490,2492,2494,2496,2498,2500],{"class":91,"line":709},[89,2489,2393],{"class":2286},[89,2491,248],{"class":95},[89,2493,2433],{"class":259},[89,2495,2349],{"class":2348},[89,2497,2345],{"class":259},[89,2499,2349],{"class":2348},[89,2501,162],{"class":95},[89,2503,2504,2507,2509,2512,2514],{"class":91,"line":714},[89,2505,2506],{"class":2286},"        font-size",[89,2508,248],{"class":95},[89,2510,2511],{"class":259}," 14",[89,2513,2349],{"class":2348},[89,2515,162],{"class":95},[89,2517,2518,2521,2523,2526,2528,2531,2534,2537],{"class":91,"line":742},[89,2519,2520],{"class":2286},"        border",[89,2522,248],{"class":95},[89,2524,2525],{"class":259}," 1",[89,2527,2349],{"class":2348},[89,2529,2530],{"class":2304}," solid",[89,2532,2533],{"class":95}," #",[89,2535,2536],{"class":2304},"ccc",[89,2538,162],{"class":95},[89,2540,2541,2543,2545,2547,2549],{"class":91,"line":761},[89,2542,2407],{"class":2286},[89,2544,248],{"class":95},[89,2546,2412],{"class":259},[89,2548,2349],{"class":2348},[89,2550,162],{"class":95},[89,2552,2553],{"class":91,"line":766},[89,2554,2312],{"class":95},[89,2556,2557,2559,2561],{"class":91,"line":783},[89,2558,2317],{"class":95},[89,2560,1578],{"class":2320},[89,2562,183],{"class":95},[89,2564,2565,2568,2570,2573],{"class":91,"line":1993},[89,2566,2567],{"class":2286},"        list-style",[89,2569,248],{"class":95},[89,2571,2572],{"class":2304}," none",[89,2574,162],{"class":95},[89,2576,2577,2579,2581,2583,2585,2587,2589],{"class":91,"line":2009},[89,2578,2287],{"class":2286},[89,2580,248],{"class":95},[89,2582,2412],{"class":259},[89,2584,2349],{"class":2348},[89,2586,2292],{"class":259},[89,2588,2292],{"class":259},[89,2590,162],{"class":95},[89,2592,2593,2595,2597,2599],{"class":91,"line":2025},[89,2594,2393],{"class":2286},[89,2596,248],{"class":95},[89,2598,2292],{"class":259},[89,2600,162],{"class":95},[89,2602,2603,2605,2607,2609],{"class":91,"line":2030},[89,2604,2381],{"class":2286},[89,2606,248],{"class":95},[89,2608,2386],{"class":2304},[89,2610,162],{"class":95},[89,2612,2613,2615,2617,2619,2621,2623,2625,2627],{"class":91,"line":2061},[89,2614,2520],{"class":2286},[89,2616,248],{"class":95},[89,2618,2525],{"class":259},[89,2620,2349],{"class":2348},[89,2622,2530],{"class":2304},[89,2624,2533],{"class":95},[89,2626,2536],{"class":2304},[89,2628,162],{"class":95},[89,2630,2631,2633,2635,2637,2639],{"class":91,"line":2075},[89,2632,2407],{"class":2286},[89,2634,248],{"class":95},[89,2636,2412],{"class":259},[89,2638,2349],{"class":2348},[89,2640,162],{"class":95},[89,2642,2643,2646,2648,2651,2653],{"class":91,"line":2093},[89,2644,2645],{"class":2286},"        max-height",[89,2647,248],{"class":95},[89,2649,2650],{"class":259}," 160",[89,2652,2349],{"class":2348},[89,2654,162],{"class":95},[89,2656,2657,2660,2662,2665],{"class":91,"line":2103},[89,2658,2659],{"class":2286},"        overflow-y",[89,2661,248],{"class":95},[89,2663,2664],{"class":2304}," auto",[89,2666,162],{"class":95},[89,2668,2669],{"class":91,"line":2108},[89,2670,2312],{"class":95},[89,2672,2673,2675,2677,2679,2681,2684],{"class":91,"line":2126},[89,2674,2317],{"class":95},[89,2676,1578],{"class":2320},[89,2678,1874],{"class":2278},[89,2680,248],{"class":95},[89,2682,2683],{"class":106},"hover",[89,2685,183],{"class":95},[89,2687,2688,2690,2692,2694,2697],{"class":91,"line":2135},[89,2689,2381],{"class":2286},[89,2691,248],{"class":95},[89,2693,2533],{"class":95},[89,2695,2696],{"class":2304},"f0f0f0",[89,2698,162],{"class":95},[89,2700,2702],{"class":91,"line":2701},40,[89,2703,2312],{"class":95},[89,2705,2707,2709,2711],{"class":91,"line":2706},41,[89,2708,2317],{"class":95},[89,2710,228],{"class":2320},[89,2712,183],{"class":95},[89,2714,2716,2718,2720,2723,2726],{"class":91,"line":2715},42,[89,2717,2476],{"class":2286},[89,2719,248],{"class":95},[89,2721,2722],{"class":259}," 100",[89,2724,2725],{"class":2348},"vw",[89,2727,162],{"class":95},[89,2729,2731,2734,2736,2738,2741],{"class":91,"line":2730},43,[89,2732,2733],{"class":2286},"        height",[89,2735,248],{"class":95},[89,2737,2722],{"class":259},[89,2739,2740],{"class":2348},"vh",[89,2742,162],{"class":95},[89,2744,2746],{"class":91,"line":2745},44,[89,2747,2312],{"class":95},[89,2749,2751,2754,2756],{"class":91,"line":2750},45,[89,2752,2753],{"class":95},"    \u003C\u002F",[89,2755,1920],{"class":99},[89,2757,139],{"class":95},[89,2759,2761,2764,2766],{"class":91,"line":2760},46,[89,2762,2763],{"class":95},"  \u003C\u002F",[89,2765,2219],{"class":99},[89,2767,139],{"class":95},[89,2769,2771,2773,2776],{"class":91,"line":2770},47,[89,2772,2216],{"class":95},[89,2774,2775],{"class":99},"body",[89,2777,139],{"class":95},[89,2779,2781,2783,2786,2789,2791,2793,2795,2797],{"class":91,"line":2780},48,[89,2782,2226],{"class":95},[89,2784,2785],{"class":99},"div",[89,2787,2788],{"class":106}," id",[89,2790,116],{"class":95},[89,2792,120],{"class":119},[89,2794,2321],{"class":123},[89,2796,120],{"class":119},[89,2798,139],{"class":95},[89,2800,2802,2805],{"class":91,"line":2801},49,[89,2803,2804],{"class":95},"      \u003C",[89,2806,2807],{"class":99},"input\n",[89,2809,2811,2814,2816,2818,2820],{"class":91,"line":2810},50,[89,2812,2813],{"class":106},"        id",[89,2815,116],{"class":95},[89,2817,120],{"class":119},[89,2819,1550],{"class":123},[89,2821,127],{"class":119},[89,2823,2825,2828,2830,2832,2835],{"class":91,"line":2824},51,[89,2826,2827],{"class":106},"        type",[89,2829,116],{"class":95},[89,2831,120],{"class":119},[89,2833,2834],{"class":123},"text",[89,2836,127],{"class":119},[89,2838,2840,2843,2845,2847,2850],{"class":91,"line":2839},52,[89,2841,2842],{"class":106},"        placeholder",[89,2844,116],{"class":95},[89,2846,120],{"class":119},[89,2848,2849],{"class":123},"e.g. NW-25-24-1-W5",[89,2851,127],{"class":119},[89,2853,2855],{"class":91,"line":2854},53,[89,2856,2857],{"class":95},"      \u002F>\n",[89,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2879],{"class":91,"line":2860},54,[89,2862,2804],{"class":95},[89,2864,35],{"class":99},[89,2866,2788],{"class":106},[89,2868,116],{"class":95},[89,2870,120],{"class":119},[89,2872,1578],{"class":123},[89,2874,120],{"class":119},[89,2876,133],{"class":95},[89,2878,35],{"class":99},[89,2880,139],{"class":95},[89,2882,2884,2886,2888],{"class":91,"line":2883},55,[89,2885,2753],{"class":95},[89,2887,2785],{"class":99},[89,2889,139],{"class":95},[89,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911],{"class":91,"line":2892},56,[89,2894,2226],{"class":95},[89,2896,2785],{"class":99},[89,2898,2788],{"class":106},[89,2900,116],{"class":95},[89,2902,120],{"class":119},[89,2904,228],{"class":123},[89,2906,120],{"class":119},[89,2908,133],{"class":95},[89,2910,2785],{"class":99},[89,2912,139],{"class":95},[89,2914,2916],{"class":91,"line":2915},57,[89,2917,168],{"emptyLinePlaceholder":167},[89,2919,2921,2923,2925],{"class":91,"line":2920},58,[89,2922,2226],{"class":95},[89,2924,136],{"class":99},[89,2926,139],{"class":95},[89,2928,2930,2932,2935,2937,2939,2941,2943],{"class":91,"line":2929},59,[89,2931,2033],{"class":154},[89,2933,2934],{"class":158}," TC_API_KEY",[89,2936,191],{"class":95},[89,2938,420],{"class":119},[89,2940,433],{"class":123},[89,2942,120],{"class":119},[89,2944,162],{"class":95},[89,2946,2948,2951,2953],{"class":91,"line":2947},60,[89,2949,2950],{"class":154},"      let",[89,2952,159],{"class":158},[89,2954,162],{"class":95},[89,2956,2958],{"class":91,"line":2957},61,[89,2959,168],{"emptyLinePlaceholder":167},[89,2961,2963,2966,2968,2970],{"class":91,"line":2962},62,[89,2964,2965],{"class":154},"      function",[89,2967,177],{"class":176},[89,2969,180],{"class":95},[89,2971,183],{"class":95},[89,2973,2975,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012],{"class":91,"line":2974},63,[89,2976,2977],{"class":158},"        map",[89,2979,191],{"class":95},[89,2981,195],{"class":194},[89,2983,198],{"class":158},[89,2985,201],{"class":95},[89,2987,204],{"class":158},[89,2989,201],{"class":95},[89,2991,209],{"class":176},[89,2993,213],{"class":212},[89,2995,216],{"class":158},[89,2997,201],{"class":95},[89,2999,221],{"class":176},[89,3001,213],{"class":212},[89,3003,120],{"class":119},[89,3005,228],{"class":123},[89,3007,120],{"class":119},[89,3009,233],{"class":212},[89,3011,236],{"class":95},[89,3013,183],{"class":95},[89,3015,3017,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040],{"class":91,"line":3016},64,[89,3018,3019],{"class":244},"          center",[89,3021,248],{"class":95},[89,3023,251],{"class":95},[89,3025,254],{"class":244},[89,3027,248],{"class":95},[89,3029,260],{"class":259},[89,3031,236],{"class":95},[89,3033,265],{"class":244},[89,3035,248],{"class":95},[89,3037,270],{"class":194},[89,3039,273],{"class":259},[89,3041,276],{"class":95},[89,3043,3045,3048,3050],{"class":91,"line":3044},65,[89,3046,3047],{"class":244},"          zoom",[89,3049,248],{"class":95},[89,3051,287],{"class":259},[89,3053,3055,3058,3060],{"class":91,"line":3054},66,[89,3056,3057],{"class":95},"        }",[89,3059,233],{"class":212},[89,3061,162],{"class":95},[89,3063,3065],{"class":91,"line":3064},67,[89,3066,168],{"emptyLinePlaceholder":167},[89,3068,3070,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093],{"class":91,"line":3069},68,[89,3071,3072],{"class":154},"        const",[89,3074,1534],{"class":158},[89,3076,191],{"class":95},[89,3078,1539],{"class":158},[89,3080,201],{"class":95},[89,3082,221],{"class":176},[89,3084,213],{"class":212},[89,3086,120],{"class":119},[89,3088,1550],{"class":123},[89,3090,120],{"class":119},[89,3092,233],{"class":212},[89,3094,162],{"class":95},[89,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120],{"class":91,"line":3097},69,[89,3099,3072],{"class":154},[89,3101,1563],{"class":158},[89,3103,191],{"class":95},[89,3105,1539],{"class":158},[89,3107,201],{"class":95},[89,3109,221],{"class":176},[89,3111,213],{"class":212},[89,3113,120],{"class":119},[89,3115,1578],{"class":123},[89,3117,120],{"class":119},[89,3119,233],{"class":212},[89,3121,162],{"class":95},[89,3123,3125],{"class":91,"line":3124},70,[89,3126,168],{"emptyLinePlaceholder":167},[89,3128,3130,3133,3135,3137,3139,3141,3143,3145,3147,3149,3151,3153],{"class":91,"line":3129},71,[89,3131,3132],{"class":158},"        input",[89,3134,201],{"class":95},[89,3136,1597],{"class":176},[89,3138,213],{"class":212},[89,3140,120],{"class":119},[89,3142,1520],{"class":123},[89,3144,120],{"class":119},[89,3146,236],{"class":95},[89,3148,1610],{"class":154},[89,3150,1468],{"class":95},[89,3152,524],{"class":523},[89,3154,183],{"class":95},[89,3156,3158,3161,3163,3165,3167,3169,3171,3173,3175,3177],{"class":91,"line":3157},72,[89,3159,3160],{"class":154},"          const",[89,3162,1623],{"class":158},[89,3164,191],{"class":95},[89,3166,1534],{"class":158},[89,3168,201],{"class":95},[89,3170,1632],{"class":158},[89,3172,201],{"class":95},[89,3174,1637],{"class":176},[89,3176,180],{"class":212},[89,3178,162],{"class":95},[89,3180,3182,3185,3187,3189,3191,3193,3195,3197,3199],{"class":91,"line":3181},73,[89,3183,3184],{"class":364},"          if",[89,3186,565],{"class":212},[89,3188,347],{"class":158},[89,3190,201],{"class":95},[89,3192,1655],{"class":1654},[89,3194,1658],{"class":95},[89,3196,1661],{"class":259},[89,3198,233],{"class":212},[89,3200,183],{"class":95},[89,3202,3204,3207,3209,3211,3213,3215],{"class":91,"line":3203},74,[89,3205,3206],{"class":158},"            suggestions",[89,3208,201],{"class":95},[89,3210,1675],{"class":158},[89,3212,191],{"class":95},[89,3214,1680],{"class":119},[89,3216,162],{"class":95},[89,3218,3220,3223],{"class":91,"line":3219},75,[89,3221,3222],{"class":364},"            return",[89,3224,162],{"class":95},[89,3226,3228],{"class":91,"line":3227},76,[89,3229,3230],{"class":95},"          }\n",[89,3232,3234],{"class":91,"line":3233},77,[89,3235,168],{"emptyLinePlaceholder":167},[89,3237,3239,3241,3244,3246,3248,3250],{"class":91,"line":3238},78,[89,3240,3160],{"class":154},[89,3242,3243],{"class":158}," res",[89,3245,191],{"class":95},[89,3247,365],{"class":364},[89,3249,368],{"class":176},[89,3251,371],{"class":212},[89,3253,3255,3258,3260,3262,3264,3266,3268,3270,3272,3274,3276],{"class":91,"line":3254},79,[89,3256,3257],{"class":119},"            `",[89,3259,1719],{"class":123},[89,3261,383],{"class":382},[89,3263,386],{"class":176},[89,3265,213],{"class":389},[89,3267,347],{"class":392},[89,3269,233],{"class":389},[89,3271,397],{"class":382},[89,3273,1734],{"class":123},[89,3275,400],{"class":119},[89,3277,403],{"class":95},[89,3279,3281,3284,3287,3289,3291,3293,3295,3297,3299,3301,3303],{"class":91,"line":3280},80,[89,3282,3283],{"class":95},"            {",[89,3285,3286],{"class":244}," headers",[89,3288,248],{"class":95},[89,3290,251],{"class":95},[89,3292,420],{"class":119},[89,3294,424],{"class":423},[89,3296,120],{"class":119},[89,3298,248],{"class":95},[89,3300,2934],{"class":158},[89,3302,735],{"class":95},[89,3304,438],{"class":95},[89,3306,3308,3311],{"class":91,"line":3307},81,[89,3309,3310],{"class":212},"          )",[89,3312,162],{"class":95},[89,3314,3316,3318,3320,3322,3324,3326,3328,3330,3332],{"class":91,"line":3315},82,[89,3317,3160],{"class":154},[89,3319,462],{"class":158},[89,3321,191],{"class":95},[89,3323,365],{"class":364},[89,3325,3243],{"class":158},[89,3327,201],{"class":95},[89,3329,473],{"class":176},[89,3331,180],{"class":212},[89,3333,162],{"class":95},[89,3335,3337,3340,3342,3344,3346,3348],{"class":91,"line":3336},83,[89,3338,3339],{"class":158},"          suggestions",[89,3341,201],{"class":95},[89,3343,1675],{"class":158},[89,3345,191],{"class":95},[89,3347,1680],{"class":119},[89,3349,162],{"class":95},[89,3351,3353],{"class":91,"line":3352},84,[89,3354,168],{"emptyLinePlaceholder":167},[89,3356,3358,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379],{"class":91,"line":3357},85,[89,3359,3360],{"class":158},"          data",[89,3362,201],{"class":95},[89,3364,506],{"class":158},[89,3366,201],{"class":95},[89,3368,843],{"class":176},[89,3370,213],{"class":212},[89,3372,213],{"class":95},[89,3374,850],{"class":346},[89,3376,233],{"class":95},[89,3378,524],{"class":523},[89,3380,183],{"class":95},[89,3382,3384,3387,3389,3391,3393,3395,3397,3399,3401],{"class":91,"line":3383},86,[89,3385,3386],{"class":154},"            const",[89,3388,1852],{"class":158},[89,3390,191],{"class":95},[89,3392,1857],{"class":158},[89,3394,201],{"class":95},[89,3396,532],{"class":158},[89,3398,201],{"class":95},[89,3400,1284],{"class":158},[89,3402,162],{"class":95},[89,3404,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428],{"class":91,"line":3405},87,[89,3407,3386],{"class":154},[89,3409,1874],{"class":158},[89,3411,191],{"class":95},[89,3413,1539],{"class":158},[89,3415,201],{"class":95},[89,3417,1883],{"class":176},[89,3419,213],{"class":212},[89,3421,120],{"class":119},[89,3423,38],{"class":123},[89,3425,120],{"class":119},[89,3427,233],{"class":212},[89,3429,162],{"class":95},[89,3431,3433,3436,3438,3440,3442,3444],{"class":91,"line":3432},88,[89,3434,3435],{"class":158},"            li",[89,3437,201],{"class":95},[89,3439,1905],{"class":158},[89,3441,191],{"class":95},[89,3443,1852],{"class":158},[89,3445,162],{"class":95},[89,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467],{"class":91,"line":3448},89,[89,3450,3435],{"class":158},[89,3452,201],{"class":95},[89,3454,1920],{"class":158},[89,3456,201],{"class":95},[89,3458,1925],{"class":158},[89,3460,191],{"class":95},[89,3462,420],{"class":119},[89,3464,1932],{"class":123},[89,3466,120],{"class":119},[89,3468,162],{"class":95},[89,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490],{"class":91,"line":3471},90,[89,3473,3435],{"class":158},[89,3475,201],{"class":95},[89,3477,1920],{"class":158},[89,3479,201],{"class":95},[89,3481,1949],{"class":158},[89,3483,191],{"class":95},[89,3485,420],{"class":119},[89,3487,1956],{"class":123},[89,3489,120],{"class":119},[89,3491,162],{"class":95},[89,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517],{"class":91,"line":3494},91,[89,3496,3435],{"class":158},[89,3498,201],{"class":95},[89,3500,1597],{"class":176},[89,3502,213],{"class":212},[89,3504,120],{"class":119},[89,3506,1461],{"class":123},[89,3508,120],{"class":119},[89,3510,236],{"class":95},[89,3512,1610],{"class":154},[89,3514,1468],{"class":95},[89,3516,524],{"class":523},[89,3518,183],{"class":95},[89,3520,3522,3525,3527,3529,3531,3533],{"class":91,"line":3521},92,[89,3523,3524],{"class":158},"              input",[89,3526,201],{"class":95},[89,3528,1632],{"class":158},[89,3530,191],{"class":95},[89,3532,1852],{"class":158},[89,3534,162],{"class":95},[89,3536,3538,3541,3543,3545,3547,3549],{"class":91,"line":3537},93,[89,3539,3540],{"class":158},"              suggestions",[89,3542,201],{"class":95},[89,3544,1675],{"class":158},[89,3546,191],{"class":95},[89,3548,1680],{"class":119},[89,3550,162],{"class":95},[89,3552,3554,3557,3560,3562,3564,3566],{"class":91,"line":3553},94,[89,3555,3556],{"class":364},"              await",[89,3558,3559],{"class":176}," loadLocation",[89,3561,213],{"class":212},[89,3563,2054],{"class":158},[89,3565,233],{"class":212},[89,3567,162],{"class":95},[89,3569,3571,3574,3576],{"class":91,"line":3570},95,[89,3572,3573],{"class":95},"            }",[89,3575,233],{"class":212},[89,3577,162],{"class":95},[89,3579,3581,3583,3585,3587,3589,3591,3593],{"class":91,"line":3580},96,[89,3582,3206],{"class":158},[89,3584,201],{"class":95},[89,3586,2115],{"class":176},[89,3588,213],{"class":212},[89,3590,38],{"class":158},[89,3592,233],{"class":212},[89,3594,162],{"class":95},[89,3596,3598,3601,3603],{"class":91,"line":3597},97,[89,3599,3600],{"class":95},"          }",[89,3602,233],{"class":212},[89,3604,162],{"class":95},[89,3606,3608,3610,3612],{"class":91,"line":3607},98,[89,3609,3057],{"class":95},[89,3611,233],{"class":212},[89,3613,162],{"class":95},[89,3615,3617],{"class":91,"line":3616},99,[89,3618,2312],{"class":95},[89,3620,3622],{"class":91,"line":3621},100,[89,3623,168],{"emptyLinePlaceholder":167},[89,3625,3627,3630,3632,3634,3636,3638,3640],{"class":91,"line":3626},101,[89,3628,3629],{"class":154},"      async",[89,3631,338],{"class":154},[89,3633,3559],{"class":176},[89,3635,213],{"class":95},[89,3637,347],{"class":346},[89,3639,233],{"class":95},[89,3641,183],{"class":95},[89,3643,3645,3647,3649,3651,3653,3655],{"class":91,"line":3644},102,[89,3646,3072],{"class":154},[89,3648,3243],{"class":158},[89,3650,191],{"class":95},[89,3652,365],{"class":364},[89,3654,368],{"class":176},[89,3656,371],{"class":212},[89,3658,3660,3663,3665,3667,3669,3671,3673,3675,3677,3679],{"class":91,"line":3659},103,[89,3661,3662],{"class":119},"          `",[89,3664,379],{"class":123},[89,3666,383],{"class":382},[89,3668,386],{"class":176},[89,3670,213],{"class":389},[89,3672,347],{"class":392},[89,3674,233],{"class":389},[89,3676,397],{"class":382},[89,3678,400],{"class":119},[89,3680,403],{"class":95},[89,3682,3684,3687,3689,3691,3693,3695,3697,3699,3701,3703,3705],{"class":91,"line":3683},104,[89,3685,3686],{"class":95},"          {",[89,3688,3286],{"class":244},[89,3690,248],{"class":95},[89,3692,251],{"class":95},[89,3694,420],{"class":119},[89,3696,424],{"class":423},[89,3698,120],{"class":119},[89,3700,248],{"class":95},[89,3702,2934],{"class":158},[89,3704,735],{"class":95},[89,3706,438],{"class":95},[89,3708,3710,3713],{"class":91,"line":3709},105,[89,3711,3712],{"class":212},"        )",[89,3714,162],{"class":95},[89,3716,3718,3720,3722,3724,3726,3728,3730,3732,3734],{"class":91,"line":3717},106,[89,3719,3072],{"class":154},[89,3721,462],{"class":158},[89,3723,191],{"class":95},[89,3725,365],{"class":364},[89,3727,3243],{"class":158},[89,3729,201],{"class":95},[89,3731,473],{"class":176},[89,3733,180],{"class":212},[89,3735,162],{"class":95},[89,3737,3739],{"class":91,"line":3738},107,[89,3740,168],{"emptyLinePlaceholder":167},[89,3742,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770,3772,3774,3776,3778,3780,3782,3784,3786,3788,3790],{"class":91,"line":3743},108,[89,3745,3072],{"class":154},[89,3747,497],{"class":158},[89,3749,191],{"class":95},[89,3751,462],{"class":158},[89,3753,201],{"class":95},[89,3755,506],{"class":158},[89,3757,201],{"class":95},[89,3759,511],{"class":176},[89,3761,213],{"class":212},[89,3763,213],{"class":95},[89,3765,518],{"class":346},[89,3767,233],{"class":95},[89,3769,524],{"class":523},[89,3771,527],{"class":158},[89,3773,201],{"class":95},[89,3775,532],{"class":158},[89,3777,201],{"class":95},[89,3779,537],{"class":158},[89,3781,540],{"class":194},[89,3783,420],{"class":119},[89,3785,545],{"class":123},[89,3787,120],{"class":119},[89,3789,233],{"class":212},[89,3791,162],{"class":95},[89,3793,3795,3797,3799,3801,3803,3805,3807,3809,3811,3813,3815,3817,3819,3821,3823,3825,3827,3829,3831,3833,3835,3837,3839,3841],{"class":91,"line":3794},109,[89,3796,3072],{"class":154},[89,3798,1162],{"class":158},[89,3800,191],{"class":95},[89,3802,462],{"class":158},[89,3804,201],{"class":95},[89,3806,506],{"class":158},[89,3808,201],{"class":95},[89,3810,511],{"class":176},[89,3812,213],{"class":212},[89,3814,213],{"class":95},[89,3816,518],{"class":346},[89,3818,233],{"class":95},[89,3820,524],{"class":523},[89,3822,527],{"class":158},[89,3824,201],{"class":95},[89,3826,612],{"class":158},[89,3828,201],{"class":95},[89,3830,1195],{"class":158},[89,3832,540],{"class":194},[89,3834,420],{"class":119},[89,3836,317],{"class":123},[89,3838,120],{"class":119},[89,3840,233],{"class":212},[89,3842,162],{"class":95},[89,3844,3846],{"class":91,"line":3845},110,[89,3847,168],{"emptyLinePlaceholder":167},[89,3849,3851,3854,3856,3858,3860,3862,3864],{"class":91,"line":3850},111,[89,3852,3853],{"class":364},"        if",[89,3855,565],{"class":212},[89,3857,568],{"class":194},[89,3859,545],{"class":158},[89,3861,233],{"class":212},[89,3863,575],{"class":364},[89,3865,162],{"class":95},[89,3867,3869],{"class":91,"line":3868},112,[89,3870,168],{"emptyLinePlaceholder":167},[89,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898],{"class":91,"line":3873},113,[89,3875,3072],{"class":154},[89,3877,593],{"class":95},[89,3879,596],{"class":158},[89,3881,236],{"class":95},[89,3883,254],{"class":158},[89,3885,603],{"class":95},[89,3887,191],{"class":95},[89,3889,497],{"class":158},[89,3891,201],{"class":95},[89,3893,612],{"class":158},[89,3895,201],{"class":95},[89,3897,617],{"class":158},[89,3899,162],{"class":95},[89,3901,3903,3905,3907,3909,3911,3913,3915,3917,3919,3921,3923],{"class":91,"line":3902},114,[89,3904,2977],{"class":158},[89,3906,201],{"class":95},[89,3908,721],{"class":176},[89,3910,213],{"class":212},[89,3912,726],{"class":95},[89,3914,254],{"class":158},[89,3916,236],{"class":95},[89,3918,265],{"class":158},[89,3920,735],{"class":95},[89,3922,233],{"class":212},[89,3924,162],{"class":95},[89,3926,3928,3930,3932,3934,3936,3938,3940],{"class":91,"line":3927},115,[89,3929,2977],{"class":158},[89,3931,201],{"class":95},[89,3933,749],{"class":176},[89,3935,213],{"class":212},[89,3937,754],{"class":259},[89,3939,233],{"class":212},[89,3941,162],{"class":95},[89,3943,3945],{"class":91,"line":3944},116,[89,3946,168],{"emptyLinePlaceholder":167},[89,3948,3950,3952,3954,3956,3958,3960,3962,3964,3966,3968,3970,3972,3974,3976,3978,3980,3982,3984,3986],{"class":91,"line":3949},117,[89,3951,2977],{"class":158},[89,3953,201],{"class":95},[89,3955,838],{"class":158},[89,3957,201],{"class":95},[89,3959,843],{"class":176},[89,3961,213],{"class":212},[89,3963,213],{"class":95},[89,3965,518],{"class":346},[89,3967,233],{"class":95},[89,3969,524],{"class":523},[89,3971,159],{"class":158},[89,3973,201],{"class":95},[89,3975,838],{"class":158},[89,3977,201],{"class":95},[89,3979,865],{"class":176},[89,3981,213],{"class":212},[89,3983,518],{"class":158},[89,3985,872],{"class":212},[89,3987,162],{"class":95},[89,3989,3991,3993,3995,3997,3999,4001,4003,4005,4007],{"class":91,"line":3990},118,[89,3992,2977],{"class":158},[89,3994,201],{"class":95},[89,3996,838],{"class":158},[89,3998,201],{"class":95},[89,4000,896],{"class":176},[89,4002,213],{"class":212},[89,4004,838],{"class":158},[89,4006,233],{"class":212},[89,4008,162],{"class":95},[89,4010,4012,4014,4016,4018,4020,4022,4024],{"class":91,"line":4011},119,[89,4013,2977],{"class":158},[89,4015,201],{"class":95},[89,4017,838],{"class":158},[89,4019,201],{"class":95},[89,4021,926],{"class":176},[89,4023,213],{"class":212},[89,4025,652],{"class":95},[89,4027,4029,4032,4034,4036,4038,4040],{"class":91,"line":4028},120,[89,4030,4031],{"class":244},"          fillColor",[89,4033,248],{"class":95},[89,4035,420],{"class":119},[89,4037,942],{"class":123},[89,4039,120],{"class":119},[89,4041,403],{"class":95},[89,4043,4045,4048,4050,4052],{"class":91,"line":4044},121,[89,4046,4047],{"class":244},"          fillOpacity",[89,4049,248],{"class":95},[89,4051,956],{"class":259},[89,4053,403],{"class":95},[89,4055,4057,4060,4062,4064,4066,4068],{"class":91,"line":4056},122,[89,4058,4059],{"class":244},"          strokeColor",[89,4061,248],{"class":95},[89,4063,420],{"class":119},[89,4065,942],{"class":123},[89,4067,120],{"class":119},[89,4069,403],{"class":95},[89,4071,4073,4076,4078],{"class":91,"line":4072},123,[89,4074,4075],{"class":244},"          strokeWeight",[89,4077,248],{"class":95},[89,4079,983],{"class":259},[89,4081,4083,4085,4087],{"class":91,"line":4082},124,[89,4084,3057],{"class":95},[89,4086,233],{"class":212},[89,4088,162],{"class":95},[89,4090,4092],{"class":91,"line":4091},125,[89,4093,168],{"emptyLinePlaceholder":167},[89,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117],{"class":91,"line":4096},126,[89,4098,3072],{"class":154},[89,4100,632],{"class":158},[89,4102,191],{"class":95},[89,4104,195],{"class":194},[89,4106,198],{"class":158},[89,4108,201],{"class":95},[89,4110,204],{"class":158},[89,4112,201],{"class":95},[89,4114,647],{"class":176},[89,4116,213],{"class":212},[89,4118,652],{"class":95},[89,4120,4122,4125,4127,4129,4131,4133,4135],{"class":91,"line":4121},127,[89,4123,4124],{"class":244},"          position",[89,4126,248],{"class":95},[89,4128,251],{"class":95},[89,4130,254],{"class":158},[89,4132,236],{"class":95},[89,4134,265],{"class":158},[89,4136,276],{"class":95},[89,4138,4140,4143],{"class":91,"line":4139},128,[89,4141,4142],{"class":158},"          map",[89,4144,403],{"class":95},[89,4146,4148,4151,4153,4155,4157,4159,4161],{"class":91,"line":4147},129,[89,4149,4150],{"class":244},"          title",[89,4152,248],{"class":95},[89,4154,497],{"class":158},[89,4156,201],{"class":95},[89,4158,532],{"class":158},[89,4160,201],{"class":95},[89,4162,697],{"class":158},[89,4164,4166,4168,4170],{"class":91,"line":4165},130,[89,4167,3057],{"class":95},[89,4169,233],{"class":212},[89,4171,162],{"class":95},[89,4173,4175],{"class":91,"line":4174},131,[89,4176,168],{"emptyLinePlaceholder":167},[89,4178,4180,4182,4184,4186,4188],{"class":91,"line":4179},132,[89,4181,3853],{"class":364},[89,4183,565],{"class":212},[89,4185,1222],{"class":158},[89,4187,233],{"class":212},[89,4189,183],{"class":95},[89,4191,4193,4195,4197,4199,4201,4203,4205],{"class":91,"line":4192},133,[89,4194,3160],{"class":154},[89,4196,1239],{"class":158},[89,4198,191],{"class":95},[89,4200,1162],{"class":158},[89,4202,201],{"class":95},[89,4204,532],{"class":158},[89,4206,162],{"class":95},[89,4208,4210,4212,4214,4216,4218,4220,4222,4224,4226,4228,4230],{"class":91,"line":4209},134,[89,4211,3160],{"class":154},[89,4213,1413],{"class":158},[89,4215,191],{"class":95},[89,4217,195],{"class":194},[89,4219,198],{"class":158},[89,4221,201],{"class":95},[89,4223,204],{"class":158},[89,4225,201],{"class":95},[89,4227,1428],{"class":176},[89,4229,213],{"class":212},[89,4231,652],{"class":95},[89,4233,4235,4238,4240,4243,4246,4248,4250,4252,4254,4256,4259,4261,4263,4265,4267,4269,4272,4274,4276,4278,4280,4282,4285,4287,4289,4291,4293,4295,4298,4300,4302,4304,4306,4308,4310,4312,4314,4316,4318,4321,4323,4325,4327,4329,4331,4334],{"class":91,"line":4234},135,[89,4236,4237],{"class":244},"            content",[89,4239,248],{"class":95},[89,4241,4242],{"class":119}," `",[89,4244,4245],{"class":123},"\u003Cdiv style=\"padding:4px 8px\">\u003Cstrong>",[89,4247,383],{"class":382},[89,4249,15],{"class":392},[89,4251,201],{"class":95},[89,4253,1284],{"class":392},[89,4255,397],{"class":382},[89,4257,4258],{"class":123},"\u003C\u002Fstrong>\u003Cbr>Quarter: ",[89,4260,383],{"class":382},[89,4262,15],{"class":392},[89,4264,201],{"class":95},[89,4266,1303],{"class":392},[89,4268,397],{"class":382},[89,4270,4271],{"class":123},"\u003Cbr>Section: ",[89,4273,383],{"class":382},[89,4275,15],{"class":392},[89,4277,201],{"class":95},[89,4279,1322],{"class":392},[89,4281,397],{"class":382},[89,4283,4284],{"class":123}," | Township: ",[89,4286,383],{"class":382},[89,4288,15],{"class":392},[89,4290,201],{"class":95},[89,4292,1340],{"class":392},[89,4294,397],{"class":382},[89,4296,4297],{"class":123},"\u003Cbr>Range: ",[89,4299,383],{"class":382},[89,4301,15],{"class":392},[89,4303,201],{"class":95},[89,4305,1358],{"class":392},[89,4307,397],{"class":382},[89,4309,1363],{"class":382},[89,4311,15],{"class":392},[89,4313,201],{"class":95},[89,4315,1370],{"class":392},[89,4317,397],{"class":382},[89,4319,4320],{"class":123}," | ",[89,4322,383],{"class":382},[89,4324,15],{"class":392},[89,4326,201],{"class":95},[89,4328,1388],{"class":392},[89,4330,397],{"class":382},[89,4332,4333],{"class":123},"\u003C\u002Fdiv>",[89,4335,4336],{"class":119},"`\n",[89,4338,4340,4342,4344],{"class":91,"line":4339},136,[89,4341,3600],{"class":95},[89,4343,233],{"class":212},[89,4345,162],{"class":95},[89,4347,4349,4352,4354,4356,4358,4360,4362,4364,4366,4368,4370,4372,4374,4376,4378,4380,4382,4384,4386],{"class":91,"line":4348},137,[89,4350,4351],{"class":158},"          marker",[89,4353,201],{"class":95},[89,4355,1454],{"class":176},[89,4357,213],{"class":212},[89,4359,120],{"class":119},[89,4361,1461],{"class":123},[89,4363,120],{"class":119},[89,4365,236],{"class":95},[89,4367,1468],{"class":95},[89,4369,524],{"class":523},[89,4371,1413],{"class":158},[89,4373,201],{"class":95},[89,4375,1482],{"class":176},[89,4377,213],{"class":212},[89,4379,228],{"class":158},[89,4381,236],{"class":95},[89,4383,632],{"class":158},[89,4385,872],{"class":212},[89,4387,162],{"class":95},[89,4389,4391],{"class":91,"line":4390},138,[89,4392,4393],{"class":95},"        }\n",[89,4395,4397],{"class":91,"line":4396},139,[89,4398,2312],{"class":95},[89,4400,4402,4404,4406],{"class":91,"line":4401},140,[89,4403,2753],{"class":95},[89,4405,136],{"class":99},[89,4407,139],{"class":95},[89,4409,4411],{"class":91,"line":4410},141,[89,4412,168],{"emptyLinePlaceholder":167},[89,4414,4416,4418],{"class":91,"line":4415},142,[89,4417,2226],{"class":95},[89,4419,100],{"class":99},[89,4421,4423],{"class":91,"line":4422},143,[89,4424,4425],{"class":106},"      async\n",[89,4427,4429,4432,4434,4436,4438],{"class":91,"line":4428},144,[89,4430,4431],{"class":106},"      src",[89,4433,116],{"class":95},[89,4435,120],{"class":119},[89,4437,124],{"class":123},[89,4439,127],{"class":119},[89,4441,4443,4446,4448],{"class":91,"line":4442},145,[89,4444,4445],{"class":95},"    >\u003C\u002F",[89,4447,136],{"class":99},[89,4449,139],{"class":95},[89,4451,4453,4455,4457],{"class":91,"line":4452},146,[89,4454,2763],{"class":95},[89,4456,2775],{"class":99},[89,4458,139],{"class":95},[89,4460,4462,4464,4466],{"class":91,"line":4461},147,[89,4463,2261],{"class":95},[89,4465,84],{"class":99},[89,4467,139],{"class":95},[10,4469,4471],{"id":4470},"next-steps","Next Steps",[35,4473,4474,4482,4490],{},[38,4475,4476,4477,4481],{},"Read the full ",[42,4478,4480],{"href":4479},"\u002Fapi","API reference"," for query parameters, error codes, and rate limits",[38,4483,4484,4485,4489],{},"Review ",[42,4486,4488],{"href":4487},"\u002Fguides\u002Fapi-integration","getting started with the Township Canada API"," if you haven't set up authentication yet",[38,4491,4492,4493,4497],{},"Learn about the ",[42,4494,4496],{"href":4495},"\u002Fguides\u002Fbatch-api-guide","batch API"," to geocode lists of legal land descriptions in one request",[4499,4500],"hr",{},[10,4502,4504],{"id":4503},"related-guides","Related Guides",[35,4506,4507,4512,4517],{},[38,4508,4509],{},[42,4510,4511],{"href":4487},"Getting Started with the Township Canada API",[38,4513,4514],{},[42,4515,4516],{"href":2161},"Using Township Canada API with Mapbox",[38,4518,4519],{},[42,4520,4521],{"href":4495},"Batch API Guide",[1920,4523,4524],{},"html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sJFLg, html code.shiki .sJFLg{--shiki-light:#E53935;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .s5q8q, html code.shiki .s5q8q{--shiki-light:#9C3EDA;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}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 .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sLdnO, html code.shiki .sLdnO{--shiki-light:#E53935;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .snCua, html code.shiki .snCua{--shiki-light:#90A4AE;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .su_V2, html code.shiki .su_V2{--shiki-light:#90A4AE;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sQtxO, html code.shiki .sQtxO{--shiki-light:#E53935;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .sIOqK, html code.shiki .sIOqK{--shiki-light:#9C3EDA;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s131V, html code.shiki .s131V{--shiki-light:#90A4AE;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .skzw8, html code.shiki .skzw8{--shiki-light:#E2931D;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .s5HLA, html code.shiki .s5HLA{--shiki-light:#8796B0;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sAntY, html code.shiki .sAntY{--shiki-light:#F76D47;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sQBxk, html code.shiki .sQBxk{--shiki-light:#F76D47;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}",{"title":85,"searchDepth":103,"depth":103,"links":4526},[4527,4528,4529,4530,4531,4532,4533,4534,4535,4536],{"id":12,"depth":103,"text":13},{"id":32,"depth":103,"text":33},{"id":66,"depth":103,"text":67},{"id":306,"depth":103,"text":307},{"id":795,"depth":103,"text":796},{"id":1122,"depth":103,"text":1123},{"id":1509,"depth":103,"text":1510},{"id":2165,"depth":103,"text":2166},{"id":4470,"depth":103,"text":4471},{"id":4503,"depth":103,"text":4504},"api","Add legal land description search, boundary polygons, and location markers to your Google Maps application using the Township Canada API. Includes working code examples.",false,"md","i-lucide-map-pin",{},"\u002Fguides\u002Fgoogle-maps-integration",{"title":5,"description":4538},"guides\u002Fgoogle-maps-integration","Rwlt1ecATAGa5RiOrS4oyAt7QsQV__Ox6EVZxUtRr0o",[4548,5037,5923],{"id":4549,"title":4550,"body":4551,"category":4537,"description":5031,"draft":4539,"extension":4540,"icon":5032,"meta":5033,"navigation":167,"order":92,"path":4487,"seo":5034,"stem":5035,"__hash__":5036},"guides\u002Fguides\u002Fapi-integration.md","Legal Land Description API Integration Guide",{"type":7,"value":4552,"toc":4996},[4553,4556,4563,4567,4596,4602,4606,4609,4613,4616,4622,4626,4629,4634,4638,4641,4646,4650,4653,4658,4662,4665,4670,4738,4744,4794,4797,4801,4805,4808,4812,4815,4819,4822,4826,4829,4833,4836,4840,4881,4885,4891,4911,4915,4918,4922,4925,4929,4932,4936,4939,4943,4953,4956,4988],[15,4554,4555],{},"Integrate Township Canada's legal land description services directly into your applications and workflows. Our REST APIs enable LLD-to-coordinate conversion, autocomplete search, batch processing, and interactive grid maps-all with simple JSON responses.",[15,4557,4558],{},[4559,4560],"img",{"alt":4561,"src":4562},"Developer Portal","\u002Fimages\u002Fguides\u002Fapi-portal.webp",[10,4564,4566],{"id":4565},"quick-start","Quick start",[4568,4569,4570,4575,4582,4586,4589,4593],"steps",{},[4571,4572,4574],"h3",{"id":4573},"get-an-api-key","Get an API key",[15,4576,4577,4578,4581],{},"Log into your Township Canada account and go to ",[50,4579,4580],{},"API"," in the main navigation. Subscribe to an API endpoint and create your first API key.",[4571,4583,4585],{"id":4584},"make-your-first-request","Make your first request",[15,4587,4588],{},"Add your API key to the request header and make a test request.",[4571,4590,4592],{"id":4591},"parse-the-response","Parse the response",[15,4594,4595],{},"All APIs return JSON with coordinates, legal descriptions, and metadata.",[15,4597,4598,4599,201],{},"For full documentation and code examples, visit the ",[42,4600,4601],{"href":4479},"API documentation",[10,4603,4605],{"id":4604},"api-endpoints","API endpoints",[15,4607,4608],{},"Township Canada offers four distinct API endpoints:",[4571,4610,4612],{"id":4611},"search-api-20month","Search API ($20\u002Fmonth)",[15,4614,4615],{},"Convert legal land descriptions to geographic coordinates and vice versa. Supports DLS, NTS, Geographic Townships, and FPS formats.",[15,4617,4618,4621],{},[50,4619,4620],{},"Use cases",": Property lookup, coordinate conversion, reverse geocoding",[4571,4623,4625],{"id":4624},"autocomplete-api-20month","Autocomplete API ($20\u002Fmonth)",[15,4627,4628],{},"Search legal land descriptions with partial text. Returns up to 10 matching results with coordinates-ideal for search boxes and type-ahead interfaces.",[15,4630,4631,4633],{},[50,4632,4620],{},": Search boxes, type-ahead, field validation",[4571,4635,4637],{"id":4636},"batch-api-40month","Batch API ($40\u002Fmonth)",[15,4639,4640],{},"Process up to 100 records per request. Convert lists of legal land descriptions to coordinates or coordinates to legal land descriptions.",[15,4642,4643,4645],{},[50,4644,4620],{},": Bulk data processing, migration, spatial analysis",[4571,4647,4649],{"id":4648},"maps-api-20month","Maps API ($20\u002Fmonth)",[15,4651,4652],{},"Display legal survey grids on maps in your web or mobile applications. Vector tiles format compatible with Mapbox GL, Leaflet, and other mapping libraries.",[15,4654,4655,4657],{},[50,4656,4620],{},": Custom mapping applications, data visualization",[10,4659,4661],{"id":4660},"api-pricing-tiers","API pricing tiers",[15,4663,4664],{},"Each API offers three pricing tiers:",[15,4666,4667],{},[50,4668,4669],{},"Search, Autocomplete & Batch APIs",[4671,4672,4673,4692],"table",{},[4674,4675,4676],"thead",{},[4677,4678,4679,4683,4686,4689],"tr",{},[4680,4681,4682],"th",{},"Tier",[4680,4684,4685],{},"Monthly Requests",[4680,4687,4688],{},"Rate Limit",[4680,4690,4691],{},"Price",[4693,4694,4695,4710,4724],"tbody",{},[4677,4696,4697,4701,4704,4707],{},[4698,4699,4700],"td",{},"Build",[4698,4702,4703],{},"1,000",[4698,4705,4706],{},"1\u002Fsec",[4698,4708,4709],{},"$20-40\u002Fmo",[4677,4711,4712,4715,4718,4721],{},[4698,4713,4714],{},"Scale",[4698,4716,4717],{},"10,000",[4698,4719,4720],{},"5\u002Fsec",[4698,4722,4723],{},"$100-200\u002Fmo",[4677,4725,4726,4729,4732,4735],{},[4698,4727,4728],{},"Enterprise",[4698,4730,4731],{},"100,000",[4698,4733,4734],{},"25\u002Fsec",[4698,4736,4737],{},"$500-1,000\u002Fmo",[15,4739,4740,4743],{},[50,4741,4742],{},"Maps API"," (higher request quotas for tile rendering)",[4671,4745,4746,4758],{},[4674,4747,4748],{},[4677,4749,4750,4752,4754,4756],{},[4680,4751,4682],{},[4680,4753,4685],{},[4680,4755,4688],{},[4680,4757,4691],{},[4693,4759,4760,4771,4782],{},[4677,4761,4762,4764,4766,4768],{},[4698,4763,4700],{},[4698,4765,4717],{},[4698,4767,4706],{},[4698,4769,4770],{},"$20\u002Fmo",[4677,4772,4773,4775,4777,4779],{},[4698,4774,4714],{},[4698,4776,4731],{},[4698,4778,4720],{},[4698,4780,4781],{},"$100\u002Fmo",[4677,4783,4784,4786,4789,4791],{},[4698,4785,4728],{},[4698,4787,4788],{},"1,000,000",[4698,4790,4734],{},[4698,4792,4793],{},"$500\u002Fmo",[15,4795,4796],{},"Annual billing saves two months compared to monthly billing.",[10,4798,4800],{"id":4799},"common-integration-patterns","Common integration patterns",[4571,4802,4804],{"id":4803},"real-estate-applications","Real Estate Applications",[15,4806,4807],{},"Add legal land description lookup to property search interfaces. Use the Autocomplete API for type-ahead search and the Search API for coordinate conversion.",[4571,4809,4811],{"id":4810},"oil-gas-software","Oil & Gas Software",[15,4813,4814],{},"Integrate batch conversion for well location management. Use the Maps API to display DLS\u002FNTS grids in custom mapping applications.",[4571,4816,4818],{"id":4817},"mobile-field-apps","Mobile Field Apps",[15,4820,4821],{},"Add LLD search and coordinate conversion for field workers. The APIs work with any mobile development framework (React Native, Flutter, native iOS\u002FAndroid).",[4571,4823,4825],{"id":4824},"gis-platforms","GIS Platforms",[15,4827,4828],{},"Enhance ArcGIS, QGIS, or custom GIS tools with legal land description support. Batch API enables bulk coordinate conversion for spatial analysis.",[4571,4830,4832],{"id":4831},"agriculture-technology","Agriculture Technology",[15,4834,4835],{},"Add quarter section and LSD lookup to farm management software. Combine with soil and boundary data for precision agriculture applications.",[10,4837,4839],{"id":4838},"getting-an-api-key","Getting an API key",[4568,4841,4842,4846,4852,4856,4859,4863,4870,4874],{},[4571,4843,4845],{"id":4844},"open-the-developer-portal","Open the Developer Portal",[15,4847,4848,4849,4851],{},"Go to ",[50,4850,4580],{}," in the main navigation to access the Developer Portal.",[4571,4853,4855],{"id":4854},"subscribe-to-an-api","Subscribe to an API",[15,4857,4858],{},"Click on the API you want to use (Search, Autocomplete, Batch, or Maps). Select a tier and complete payment.",[4571,4860,4862],{"id":4861},"create-an-api-key","Create an API key",[15,4864,4865,4866,4869],{},"Click ",[50,4867,4868],{},"+ Add Key"," and give your key a descriptive name. Copy the key immediately-it won't be shown again.",[4571,4871,4873],{"id":4872},"use-your-key","Use your key",[15,4875,4876,4877,4880],{},"Include the API key in the ",[19,4878,4879],{},"x-api-key"," header for all requests.",[10,4882,4884],{"id":4883},"managing-api-subscriptions","Managing API subscriptions",[15,4886,4887,4888,4890],{},"Manage your API subscriptions from the ",[50,4889,4580],{}," page in the main navigation. The Developer Portal provides:",[35,4892,4893,4899,4905],{},[38,4894,4895,4898],{},[50,4896,4897],{},"Overview",": View all your API keys and subscriptions",[38,4900,4901,4904],{},[50,4902,4903],{},"Logs",": Monitor API requests with timestamps and response codes",[38,4906,4907,4910],{},[50,4908,4909],{},"Alerts",": Configure usage threshold notifications",[4571,4912,4914],{"id":4913},"usage-monitoring","Usage monitoring",[15,4916,4917],{},"Track your API usage in real-time from the Overview tab. Usage resets at the start of each billing period.",[4571,4919,4921],{"id":4920},"rate-limiting","Rate limiting",[15,4923,4924],{},"Exceeding your rate limit results in HTTP 429 Too Many Requests responses. Implement exponential backoff in your integration to handle rate limits gracefully.",[4571,4926,4928],{"id":4927},"quota-management","Quota management",[15,4930,4931],{},"When you reach your monthly quota, requests return HTTP 429 until the next billing cycle. Upgrade your tier for higher quotas or implement caching to reduce request volume.",[10,4933,4935],{"id":4934},"code-examples","Code examples",[15,4937,4938],{},"Access code examples in JavaScript, Python, and cURL from the Developer Portal. Each API endpoint includes ready-to-use code snippets you can copy and customize.",[10,4940,4942],{"id":4941},"checking-system-health","Checking system health",[15,4944,4945,4946,4952],{},"For the current status of Township Canada's APIs, including uptime, response time, and incident history, visit ",[42,4947,4951],{"href":4948,"rel":4949},"https:\u002F\u002Fstatus.townshipcanada.com",[4950],"nofollow","status.townshipcanada.com",". This site provides real-time updates on API system health.",[10,4954,4955],{"id":4503},"Related guides",[35,4957,4958,4965,4972,4979],{},[38,4959,4960,4964],{},[42,4961,4963],{"href":4962},"\u002Fguides\u002Faccount-management","Account Management"," - Manage billing for API subscriptions",[38,4966,4967,4971],{},[42,4968,4970],{"href":4969},"\u002Fguides\u002Fbatch-conversion","Batch Conversion"," - Web interface for batch processing",[38,4973,4974,4978],{},[42,4975,4977],{"href":4976},"\u002Fguides\u002Fmap","Interactive Maps"," - Map features available through the Maps API",[38,4980,4981,4987],{},[42,4982,4984],{"href":4983},"\u002Fblog\u002Ftownshipcanada-sdk-typescript-npm-package",[19,4985,4986],{},"townshipcanada"," - Official TypeScript SDK for Node.js developers",[15,4989,4990,4991,4995],{},"Need help with your integration? ",[42,4992,4994],{"href":4993},"\u002Fcontact-us","Contact us"," for technical support and custom API solutions.",{"title":85,"searchDepth":103,"depth":103,"links":4997},[4998,5003,5009,5010,5017,5023,5028,5029,5030],{"id":4565,"depth":103,"text":4566,"children":4999},[5000,5001,5002],{"id":4573,"depth":110,"text":4574},{"id":4584,"depth":110,"text":4585},{"id":4591,"depth":110,"text":4592},{"id":4604,"depth":103,"text":4605,"children":5004},[5005,5006,5007,5008],{"id":4611,"depth":110,"text":4612},{"id":4624,"depth":110,"text":4625},{"id":4636,"depth":110,"text":4637},{"id":4648,"depth":110,"text":4649},{"id":4660,"depth":103,"text":4661},{"id":4799,"depth":103,"text":4800,"children":5011},[5012,5013,5014,5015,5016],{"id":4803,"depth":110,"text":4804},{"id":4810,"depth":110,"text":4811},{"id":4817,"depth":110,"text":4818},{"id":4824,"depth":110,"text":4825},{"id":4831,"depth":110,"text":4832},{"id":4838,"depth":103,"text":4839,"children":5018},[5019,5020,5021,5022],{"id":4844,"depth":110,"text":4845},{"id":4854,"depth":110,"text":4855},{"id":4861,"depth":110,"text":4862},{"id":4872,"depth":110,"text":4873},{"id":4883,"depth":103,"text":4884,"children":5024},[5025,5026,5027],{"id":4913,"depth":110,"text":4914},{"id":4920,"depth":110,"text":4921},{"id":4927,"depth":110,"text":4928},{"id":4934,"depth":103,"text":4935},{"id":4941,"depth":103,"text":4942},{"id":4503,"depth":103,"text":4955},"Integrate legal land description APIs into your applications. Convert LLDs to coordinates, add autocomplete search, process batch records, and display DLS\u002FNTS grid maps. REST API with JSON responses.","i-lucide-code",{},{"title":4550,"description":5031},"guides\u002Fapi-integration","0skTidP_JHbRyEgb2lLso64Jt5ActydUoBJbxBER46M",{"id":5038,"title":5039,"body":5040,"category":4537,"description":5916,"draft":4539,"extension":4540,"icon":5917,"meta":5918,"navigation":167,"order":485,"path":5919,"seo":5920,"stem":5921,"__hash__":5922},"guides\u002Fguides\u002Fapi-key-management.md","Managing API Keys for Development, Staging, and Production",{"type":7,"value":5041,"toc":5900},[5042,5045,5048,5052,5058,5081,5084,5090,5094,5097,5104,5107,5171,5174,5178,5181,5185,5192,5209,5212,5329,5332,5370,5374,5379,5391,5397,5564,5568,5577,5603,5610,5629,5633,5636,5662,5665,5669,5672,5676,5679,5703,5706,5802,5805,5809,5812,5815,5818,5822,5825,5840,5846,5852,5858,5864,5866,5897],[15,5043,5044],{},"Most API integrations span multiple environments-local development, a staging server, and production. Using a single API key across all three creates problems: one accidental revocation takes everything down, you can't track which environment is generating traffic, and debugging becomes harder when all requests look identical in the logs.",[15,5046,5047],{},"Township Canada lets you create unlimited API keys on paid plans. The recommended approach is one key per environment, per project.",[10,5049,5051],{"id":5050},"creating-api-keys","Creating API keys",[15,5053,5054,5055,5057],{},"API keys are managed from the ",[42,5056,4561],{"href":44},". To create a new key:",[5059,5060,5061,5066,5070,5073,5078],"ol",{},[38,5062,4848,5063,5065],{},[50,5064,4580],{}," in the main navigation",[38,5067,4865,5068],{},[50,5069,4868],{},[38,5071,5072],{},"Enter a descriptive name (see naming conventions below)",[38,5074,4865,5075],{},[50,5076,5077],{},"Create",[38,5079,5080],{},"Copy the key immediately - it will not be shown again",[15,5082,5083],{},"Each key displays its name, creation date, and last-used timestamp. Keys can be revoked individually without affecting any other key on your account.",[5085,5086,5087],"warning",{},[15,5088,5089],{},"Copy your key before closing the dialog. Township Canada does not store the full key value after creation. If you lose it, revoke the key and create a new one.",[10,5091,5093],{"id":5092},"naming-conventions","Naming conventions",[15,5095,5096],{},"A consistent naming pattern makes it easy to identify keys at a glance, especially once you have several. Use the format:",[80,5098,5102],{"className":5099,"code":5101,"language":2834},[5100],"language-text","{Environment} - {Project} {Version}\n",[19,5103,5101],{"__ignoreMap":85},[15,5105,5106],{},"Examples:",[4671,5108,5109,5119],{},[4674,5110,5111],{},[4677,5112,5113,5116],{},[4680,5114,5115],{},"Key name",[4680,5117,5118],{},"What it's for",[4693,5120,5121,5131,5141,5151,5161],{},[4677,5122,5123,5128],{},[4698,5124,5125],{},[19,5126,5127],{},"Production - Well Mapper v2",[4698,5129,5130],{},"Live production traffic for version 2 of your app",[4677,5132,5133,5138],{},[4698,5134,5135],{},[19,5136,5137],{},"Staging - Well Mapper v2",[4698,5139,5140],{},"Pre-release testing against real data",[4677,5142,5143,5148],{},[4698,5144,5145],{},[19,5146,5147],{},"Dev - Local Testing",[4698,5149,5150],{},"Your local development environment",[4677,5152,5153,5158],{},[4698,5154,5155],{},[19,5156,5157],{},"CI - Well Mapper",[4698,5159,5160],{},"Automated tests in your CI pipeline",[4677,5162,5163,5168],{},[4698,5164,5165],{},[19,5166,5167],{},"Dev - Jane Smith",[4698,5169,5170],{},"A team member's personal development key",[15,5172,5173],{},"Avoid generic names like \"API Key 1\" or \"Test Key\". When you're reviewing keys six months from now, a descriptive name tells you exactly what to keep and what to revoke.",[10,5175,5177],{"id":5176},"environment-variable-setup","Environment variable setup",[15,5179,5180],{},"Never hardcode an API key in your source code. Use environment variables so keys stay out of version control.",[4571,5182,5184],{"id":5183},"nodejs","Node.js",[15,5186,5187,5188,5191],{},"Create a ",[19,5189,5190],{},".env"," file in your project root:",[80,5193,5197],{"className":5194,"code":5195,"language":5196,"meta":85,"style":85},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","TOWNSHIP_CANADA_API_KEY=tc_live_your_key_here\n","bash",[19,5198,5199],{"__ignoreMap":85},[89,5200,5201,5204,5206],{"class":91,"line":92},[89,5202,5203],{"class":158},"TOWNSHIP_CANADA_API_KEY",[89,5205,116],{"class":95},[89,5207,5208],{"class":123},"tc_live_your_key_here\n",[15,5210,5211],{},"Load and use it in your application:",[80,5213,5215],{"className":145,"code":5214,"language":147,"meta":85,"style":85},"\u002F\u002F Make sure dotenv is loaded early (e.g., in your entry file)\nrequire(\"dotenv\").config();\n\nconst response = await fetch(\n  \"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?location=NW-36-42-3-W5\",\n  {\n    headers: {\n      \"X-API-Key\": process.env.TOWNSHIP_CANADA_API_KEY\n    }\n  }\n);\n",[19,5216,5217,5222,5247,5251,5265,5277,5282,5291,5315,5319,5323],{"__ignoreMap":85},[89,5218,5219],{"class":91,"line":92},[89,5220,5221],{"class":488},"\u002F\u002F Make sure dotenv is loaded early (e.g., in your entry file)\n",[89,5223,5224,5227,5229,5231,5234,5236,5238,5240,5243,5245],{"class":91,"line":103},[89,5225,5226],{"class":176},"require",[89,5228,213],{"class":389},[89,5230,120],{"class":119},[89,5232,5233],{"class":123},"dotenv",[89,5235,120],{"class":119},[89,5237,233],{"class":389},[89,5239,201],{"class":95},[89,5241,5242],{"class":176},"config",[89,5244,180],{"class":389},[89,5246,162],{"class":95},[89,5248,5249],{"class":91,"line":110},[89,5250,168],{"emptyLinePlaceholder":167},[89,5252,5253,5255,5257,5259,5261,5263],{"class":91,"line":130},[89,5254,1531],{"class":154},[89,5256,359],{"class":158},[89,5258,191],{"class":95},[89,5260,365],{"class":364},[89,5262,368],{"class":176},[89,5264,371],{"class":389},[89,5266,5267,5270,5273,5275],{"class":91,"line":241},[89,5268,5269],{"class":119},"  \"",[89,5271,5272],{"class":123},"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?location=NW-36-42-3-W5",[89,5274,120],{"class":119},[89,5276,403],{"class":95},[89,5278,5279],{"class":91,"line":279},[89,5280,5281],{"class":95},"  {\n",[89,5283,5284,5287,5289],{"class":91,"line":290},[89,5285,5286],{"class":244},"    headers",[89,5288,248],{"class":95},[89,5290,183],{"class":95},[89,5292,5293,5296,5298,5300,5302,5305,5307,5310,5312],{"class":91,"line":300},[89,5294,5295],{"class":119},"      \"",[89,5297,424],{"class":423},[89,5299,120],{"class":119},[89,5301,248],{"class":95},[89,5303,5304],{"class":158}," process",[89,5306,201],{"class":95},[89,5308,5309],{"class":158},"env",[89,5311,201],{"class":95},[89,5313,5314],{"class":158},"TOWNSHIP_CANADA_API_KEY\n",[89,5316,5317],{"class":91,"line":457},[89,5318,443],{"class":95},[89,5320,5321],{"class":91,"line":480},[89,5322,1694],{"class":95},[89,5324,5325,5327],{"class":91,"line":485},[89,5326,233],{"class":389},[89,5328,162],{"class":95},[15,5330,5331],{},"For the Maps API tiles, pass the key as a query parameter instead:",[80,5333,5335],{"className":145,"code":5334,"language":147,"meta":85,"style":85},"const tileUrl = `https:\u002F\u002Fmaps.townshipcanada.com\u002Fgrid\u002Fdls\u002Ftwp\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=${process.env.TOWNSHIP_CANADA_API_KEY}`;\n",[19,5336,5337],{"__ignoreMap":85},[89,5338,5339,5341,5344,5346,5348,5351,5353,5356,5358,5360,5362,5364,5366,5368],{"class":91,"line":92},[89,5340,1531],{"class":154},[89,5342,5343],{"class":158}," tileUrl",[89,5345,191],{"class":95},[89,5347,4242],{"class":119},[89,5349,5350],{"class":123},"https:\u002F\u002Fmaps.townshipcanada.com\u002Fgrid\u002Fdls\u002Ftwp\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=",[89,5352,383],{"class":382},[89,5354,5355],{"class":392},"process",[89,5357,201],{"class":95},[89,5359,5309],{"class":392},[89,5361,201],{"class":95},[89,5363,5203],{"class":392},[89,5365,397],{"class":382},[89,5367,400],{"class":119},[89,5369,162],{"class":95},[4571,5371,5373],{"id":5372},"python","Python",[15,5375,5187,5376,5378],{},[19,5377,5190],{}," file:",[80,5380,5381],{"className":5194,"code":5195,"language":5196,"meta":85,"style":85},[19,5382,5383],{"__ignoreMap":85},[89,5384,5385,5387,5389],{"class":91,"line":92},[89,5386,5203],{"class":158},[89,5388,116],{"class":95},[89,5390,5208],{"class":123},[15,5392,5393,5394,248],{},"Load it using ",[19,5395,5396],{},"python-dotenv",[80,5398,5401],{"className":5399,"code":5400,"language":5372,"meta":85,"style":85},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","import os\nfrom dotenv import load_dotenv\nimport requests\n\nload_dotenv()\n\napi_key = os.environ.get('TOWNSHIP_CANADA_API_KEY')\n\nresponse = requests.get(\n    'https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location',\n    headers={'X-API-Key': api_key},\n    params={'location': '10-15-23-4-W4'}\n)\n",[19,5402,5403,5411,5424,5431,5435,5444,5448,5481,5485,5501,5513,5534,5560],{"__ignoreMap":85},[89,5404,5405,5408],{"class":91,"line":92},[89,5406,5407],{"class":364},"import",[89,5409,5410],{"class":2257}," os\n",[89,5412,5413,5416,5419,5421],{"class":91,"line":103},[89,5414,5415],{"class":364},"from",[89,5417,5418],{"class":2257}," dotenv ",[89,5420,5407],{"class":364},[89,5422,5423],{"class":2257}," load_dotenv\n",[89,5425,5426,5428],{"class":91,"line":110},[89,5427,5407],{"class":364},[89,5429,5430],{"class":2257}," requests\n",[89,5432,5433],{"class":91,"line":130},[89,5434,168],{"emptyLinePlaceholder":167},[89,5436,5437,5441],{"class":91,"line":241},[89,5438,5440],{"class":5439},"siWMO","load_dotenv",[89,5442,5443],{"class":95},"()\n",[89,5445,5446],{"class":91,"line":279},[89,5447,168],{"emptyLinePlaceholder":167},[89,5449,5450,5453,5455,5458,5460,5464,5466,5469,5471,5474,5476,5478],{"class":91,"line":290},[89,5451,5452],{"class":2257},"api_key ",[89,5454,116],{"class":95},[89,5456,5457],{"class":2257}," os",[89,5459,201],{"class":95},[89,5461,5463],{"class":5462},"sBPpx","environ",[89,5465,201],{"class":95},[89,5467,5468],{"class":5439},"get",[89,5470,213],{"class":95},[89,5472,5473],{"class":119},"'",[89,5475,5203],{"class":123},[89,5477,5473],{"class":119},[89,5479,5480],{"class":95},")\n",[89,5482,5483],{"class":91,"line":300},[89,5484,168],{"emptyLinePlaceholder":167},[89,5486,5487,5490,5492,5495,5497,5499],{"class":91,"line":457},[89,5488,5489],{"class":2257},"response ",[89,5491,116],{"class":95},[89,5493,5494],{"class":2257}," requests",[89,5496,201],{"class":95},[89,5498,5468],{"class":5439},[89,5500,371],{"class":95},[89,5502,5503,5506,5509,5511],{"class":91,"line":480},[89,5504,5505],{"class":119},"    '",[89,5507,5508],{"class":123},"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location",[89,5510,5473],{"class":119},[89,5512,403],{"class":95},[89,5514,5515,5517,5520,5522,5524,5526,5528,5531],{"class":91,"line":485},[89,5516,5286],{"class":346},[89,5518,5519],{"class":95},"={",[89,5521,5473],{"class":119},[89,5523,424],{"class":123},[89,5525,5473],{"class":119},[89,5527,248],{"class":95},[89,5529,5530],{"class":5439}," api_key",[89,5532,5533],{"class":95},"},\n",[89,5535,5536,5539,5541,5543,5546,5548,5550,5553,5556,5558],{"class":91,"line":492},[89,5537,5538],{"class":346},"    params",[89,5540,5519],{"class":95},[89,5542,5473],{"class":119},[89,5544,5545],{"class":123},"location",[89,5547,5473],{"class":119},[89,5549,248],{"class":95},[89,5551,5552],{"class":119}," '",[89,5554,5555],{"class":123},"10-15-23-4-W4",[89,5557,5473],{"class":119},[89,5559,303],{"class":95},[89,5561,5562],{"class":91,"line":554},[89,5563,5480],{"class":95},[4571,5565,5567],{"id":5566},"keeping-keys-out-of-git","Keeping keys out of git",[15,5569,5570,5571,5573,5574,5378],{},"Add ",[19,5572,5190],{}," to your ",[19,5575,5576],{},".gitignore",[80,5578,5580],{"className":5194,"code":5579,"language":5196,"meta":85,"style":85},"# .gitignore\n.env\n.env.local\n.env.*.local\n",[19,5581,5582,5587,5593,5598],{"__ignoreMap":85},[89,5583,5584],{"class":91,"line":92},[89,5585,5586],{"class":488},"# .gitignore\n",[89,5588,5589],{"class":91,"line":103},[89,5590,5592],{"class":5591},"sYn-s",".env\n",[89,5594,5595],{"class":91,"line":110},[89,5596,5597],{"class":5591},".env.local\n",[89,5599,5600],{"class":91,"line":130},[89,5601,5602],{"class":5591},".env.*.local\n",[15,5604,5605,5606,5609],{},"Commit a ",[19,5607,5608],{},".env.example"," file with placeholder values instead. Other developers on your team know what variables to set without seeing real credentials:",[80,5611,5613],{"className":5194,"code":5612,"language":5196,"meta":85,"style":85},"# .env.example\nTOWNSHIP_CANADA_API_KEY=your_api_key_here\n",[19,5614,5615,5620],{"__ignoreMap":85},[89,5616,5617],{"class":91,"line":92},[89,5618,5619],{"class":488},"# .env.example\n",[89,5621,5622,5624,5626],{"class":91,"line":103},[89,5623,5203],{"class":158},[89,5625,116],{"class":95},[89,5627,5628],{"class":123},"your_api_key_here\n",[10,5630,5632],{"id":5631},"key-rotation-without-downtime","Key rotation without downtime",[15,5634,5635],{},"Rotating a production key requires a brief overlap period where both the old and new key are valid. Follow this sequence:",[5059,5637,5638,5644,5650,5656],{},[38,5639,5640,5643],{},[50,5641,5642],{},"Create the new key"," in the Developer Portal with the same name (add \"v2\" or today's date to distinguish it)",[38,5645,5646,5649],{},[50,5647,5648],{},"Update your deployment"," - set the new key value in your environment variables or secrets manager",[38,5651,5652,5655],{},[50,5653,5654],{},"Deploy and verify"," - confirm requests are succeeding with the new key in your application logs",[38,5657,5658,5661],{},[50,5659,5660],{},"Revoke the old key"," - only after confirming the new key is working",[15,5663,5664],{},"Never revoke the old key before confirming the new one works. A failed deploy with no fallback means downtime.",[10,5666,5668],{"id":5667},"cicd-secrets","CI\u002FCD secrets",[15,5670,5671],{},"Automated pipelines need API keys without human involvement. Store keys in your CI provider's secrets store, not in configuration files.",[4571,5673,5675],{"id":5674},"github-actions","GitHub Actions",[15,5677,5678],{},"Add your API key as a repository secret:",[5059,5680,5681,5687,5692,5698],{},[38,5682,4848,5683,5686],{},[50,5684,5685],{},"Settings → Secrets and variables → Actions"," in your GitHub repository",[38,5688,4865,5689],{},[50,5690,5691],{},"New repository secret",[38,5693,5694,5695,5697],{},"Name it ",[19,5696,5203],{}," and paste your CI key value",[38,5699,4865,5700],{},[50,5701,5702],{},"Add secret",[15,5704,5705],{},"Reference it in your workflow file:",[80,5707,5711],{"className":5708,"code":5709,"language":5710,"meta":85,"style":85},"language-yaml shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# .github\u002Fworkflows\u002Ftest.yml\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - name: Run integration tests\n        env:\n          TOWNSHIP_CANADA_API_KEY: ${{ secrets.TOWNSHIP_CANADA_API_KEY }}\n        run: npm test\n","yaml",[19,5712,5713,5718,5726,5733,5743,5750,5763,5775,5782,5792],{"__ignoreMap":85},[89,5714,5715],{"class":91,"line":92},[89,5716,5717],{"class":488},"# .github\u002Fworkflows\u002Ftest.yml\n",[89,5719,5720,5723],{"class":91,"line":103},[89,5721,5722],{"class":244},"jobs",[89,5724,5725],{"class":95},":\n",[89,5727,5728,5731],{"class":91,"line":110},[89,5729,5730],{"class":244},"  test",[89,5732,5725],{"class":95},[89,5734,5735,5738,5740],{"class":91,"line":130},[89,5736,5737],{"class":244},"    runs-on",[89,5739,248],{"class":95},[89,5741,5742],{"class":123}," ubuntu-latest\n",[89,5744,5745,5748],{"class":91,"line":241},[89,5746,5747],{"class":244},"    steps",[89,5749,5725],{"class":95},[89,5751,5752,5755,5758,5760],{"class":91,"line":279},[89,5753,5754],{"class":95},"      -",[89,5756,5757],{"class":244}," uses",[89,5759,248],{"class":95},[89,5761,5762],{"class":123}," actions\u002Fcheckout@v4\n",[89,5764,5765,5767,5770,5772],{"class":91,"line":290},[89,5766,5754],{"class":95},[89,5768,5769],{"class":244}," name",[89,5771,248],{"class":95},[89,5773,5774],{"class":123}," Run integration tests\n",[89,5776,5777,5780],{"class":91,"line":300},[89,5778,5779],{"class":244},"        env",[89,5781,5725],{"class":95},[89,5783,5784,5787,5789],{"class":91,"line":457},[89,5785,5786],{"class":244},"          TOWNSHIP_CANADA_API_KEY",[89,5788,248],{"class":95},[89,5790,5791],{"class":123}," ${{ secrets.TOWNSHIP_CANADA_API_KEY }}\n",[89,5793,5794,5797,5799],{"class":91,"line":480},[89,5795,5796],{"class":244},"        run",[89,5798,248],{"class":95},[89,5800,5801],{"class":123}," npm test\n",[15,5803,5804],{},"The same pattern applies to other CI platforms - GitLab CI uses project variables, Bitbucket Pipelines uses repository variables, and CircleCI uses environment variables in project settings. The key principle is the same: the secret is stored in the platform, referenced by name in the config file, and never written to disk or logs.",[10,5806,5808],{"id":5807},"team-key-management","Team key management",[15,5810,5811],{},"On the Business plan, account admins can view all API keys created by team members - including the key name, creator, creation date, and last-used timestamp. This makes it possible to audit which keys are active, identify keys that haven't been used recently, and revoke credentials when a team member leaves.",[15,5813,5814],{},"Individual developers see only their own keys. Admins see keys across the entire team.",[15,5816,5817],{},"If your team uses a shared integration (for example, a company-wide internal tool), create that key under an admin account rather than a personal one. That way the key doesn't become inaccessible if the original creator's account is deactivated.",[10,5819,5821],{"id":5820},"security-practices","Security practices",[15,5823,5824],{},"A few habits that prevent the most common problems:",[15,5826,5827,5830,5831,5833,5834,5839],{},[50,5828,5829],{},"Don't commit keys."," The ",[19,5832,5576],{}," pattern above covers most cases. For extra protection, consider a tool like ",[42,5835,5838],{"href":5836,"rel":5837},"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fgit-secrets",[4950],"git-secrets"," that scans commits for credential patterns before they're pushed.",[15,5841,5842,5845],{},[50,5843,5844],{},"Use separate keys for separate projects."," If Project A's key is ever compromised, you revoke that key without touching Project B. It also makes usage monitoring cleaner - each key's activity in the logs maps to exactly one project.",[15,5847,5848,5851],{},[50,5849,5850],{},"Rotate keys periodically."," There's no hard rule on frequency, but a yearly rotation for production keys is a reasonable baseline. After a team member departure, rotate any keys they had access to.",[15,5853,5854,5857],{},[50,5855,5856],{},"Delete unused keys."," Old keys from completed projects or former team members are attack surface with no benefit. If a key hasn't been used in 90 days and you don't recognize its purpose, revoke it.",[15,5859,5860,5863],{},[50,5861,5862],{},"Treat keys like passwords."," Don't paste them into chat messages, emails, or support tickets. If you need to share a key temporarily, do it through a password manager or secrets vault.",[10,5865,4955],{"id":4503},[35,5867,5868,5874,5879,5885,5890],{},[38,5869,5870,5873],{},[42,5871,5872],{"href":4487},"API Integration"," - Get started with the Township Canada API",[38,5875,5876,5878],{},[42,5877,4521],{"href":4495}," - Process multiple records in a single request",[38,5880,5881,5884],{},[42,5882,5883],{"href":2147},"Autocomplete API Guide"," - Add LLD search suggestions to your app",[38,5886,5887,5889],{},[42,5888,4963],{"href":4962}," - Manage subscriptions and billing",[38,5891,5892,5896],{},[42,5893,5895],{"href":5894},"\u002Fpricing","Pricing"," - API plan tiers and request quotas",[1920,5898,5899],{},"html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}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 .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .snCua, html code.shiki .snCua{--shiki-light:#90A4AE;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sQtxO, html code.shiki .sQtxO{--shiki-light:#E53935;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .su_V2, html code.shiki .su_V2{--shiki-light:#90A4AE;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}",{"title":85,"searchDepth":103,"depth":103,"links":5901},[5902,5903,5904,5909,5910,5913,5914,5915],{"id":5050,"depth":103,"text":5051},{"id":5092,"depth":103,"text":5093},{"id":5176,"depth":103,"text":5177,"children":5905},[5906,5907,5908],{"id":5183,"depth":110,"text":5184},{"id":5372,"depth":110,"text":5373},{"id":5566,"depth":110,"text":5567},{"id":5631,"depth":103,"text":5632},{"id":5667,"depth":103,"text":5668,"children":5911},[5912],{"id":5674,"depth":110,"text":5675},{"id":5807,"depth":103,"text":5808},{"id":5820,"depth":103,"text":5821},{"id":4503,"depth":103,"text":4955},"Create and manage multiple Township Canada API keys for different environments. Naming conventions, key rotation, environment variables, and CI\u002FCD setup.","i-lucide-key-round",{},"\u002Fguides\u002Fapi-key-management",{"title":5039,"description":5916},"guides\u002Fapi-key-management","y5S7M5b-MjrYZXjYnpDKKgJzo3-V9wx-qk4t04QBnso",{"id":5924,"title":5925,"body":5926,"category":4537,"description":6918,"draft":4539,"extension":4540,"icon":6919,"meta":6920,"navigation":167,"order":300,"path":6921,"seo":6922,"stem":6923,"__hash__":6924},"guides\u002Fguides\u002Fapi-troubleshooting.md","API Troubleshooting & Best Practices",{"type":7,"value":5927,"toc":6896},[5928,5934,5938,5942,5972,5978,5983,6000,6033,6036,6040,6045,6078,6082,6109,6113,6119,6124,6129,6142,6146,6149,6154,6165,6170,6201,6205,6216,6221,6239,6243,6250,6285,6289,6293,6401,6483,6487,6700,6704,6707,6713,6717,6720,6777,6780,6794,6798,6802,6809,6813,6816,6848,6852,6859,6861,6893],[15,5929,5930,5933],{},[50,5931,5932],{},"Getting errors from the Township Canada API?"," This guide covers the most common issues developers run into - authentication failures, CORS blocks, rate limits, and unexpected empty responses - with clear fixes for each one.",[10,5935,5937],{"id":5936},"common-errors-and-what-they-mean","Common errors and what they mean",[4571,5939,5941],{"id":5940},"forbidden-http-403","Forbidden (HTTP 403)",[80,5943,5946],{"className":5944,"code":5945,"language":473,"meta":85,"style":85},"language-json shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","{ \"message\": \"Forbidden\" }\n",[19,5947,5948],{"__ignoreMap":85},[89,5949,5950,5952,5955,5959,5961,5963,5965,5968,5970],{"class":91,"line":92},[89,5951,726],{"class":95},[89,5953,420],{"class":5954},"s4Jsk",[89,5956,5958],{"class":5957},"sLorS","message",[89,5960,120],{"class":5954},[89,5962,248],{"class":95},[89,5964,420],{"class":119},[89,5966,5967],{"class":123},"Forbidden",[89,5969,120],{"class":119},[89,5971,438],{"class":95},[15,5973,5974,5977],{},[50,5975,5976],{},"Cause:"," Your API key is missing, invalid, or not included correctly.",[15,5979,5980],{},[50,5981,5982],{},"Fix:",[5059,5984,5985,5991,5997],{},[38,5986,5987,5988],{},"Confirm your API key exists: go to ",[50,5989,5990],{},"My Account → API Access",[38,5992,5993,5994,5996],{},"Include it in the ",[19,5995,424],{}," header (not as a URL parameter)",[38,5998,5999],{},"Test with curl:",[80,6001,6003],{"className":5194,"code":6002,"language":5196,"meta":85,"style":85},"curl -H \"X-API-Key: YOUR_KEY\" \\\n  \"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?q=SW-25-24-1-W5\"\n",[19,6004,6005,6024],{"__ignoreMap":85},[89,6006,6007,6010,6014,6016,6019,6021],{"class":91,"line":92},[89,6008,6009],{"class":5591},"curl",[89,6011,6013],{"class":6012},"sz9Cv"," -H",[89,6015,420],{"class":119},[89,6017,6018],{"class":123},"X-API-Key: YOUR_KEY",[89,6020,120],{"class":119},[89,6022,6023],{"class":2304}," \\\n",[89,6025,6026,6028,6031],{"class":91,"line":103},[89,6027,5269],{"class":119},[89,6029,6030],{"class":123},"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?q=SW-25-24-1-W5",[89,6032,127],{"class":119},[15,6034,6035],{},"If you get a valid JSON response, your key works. If you still get Forbidden, the key may have been rotated - generate a new one from your account page.",[4571,6037,6039],{"id":6038},"too-many-requests-http-429","Too Many Requests (HTTP 429)",[15,6041,6042,6044],{},[50,6043,5976],{}," You exceeded the rate limit for your API tier.",[4671,6046,6047,6055],{},[4674,6048,6049],{},[4677,6050,6051,6053],{},[4680,6052,4682],{},[4680,6054,4688],{},[4693,6056,6057,6064,6071],{},[4677,6058,6059,6061],{},[4698,6060,4700],{},[4698,6062,6063],{},"1 request\u002Fsecond",[4677,6065,6066,6068],{},[4698,6067,4714],{},[4698,6069,6070],{},"5 requests\u002Fsecond",[4677,6072,6073,6075],{},[4698,6074,4728],{},[4698,6076,6077],{},"25 requests\u002Fsecond",[15,6079,6080],{},[50,6081,5982],{},[35,6083,6084,6095,6102],{},[38,6085,6086,6087,6090,6091,6094],{},"Add a delay between requests: ",[19,6088,6089],{},"await new Promise(r => setTimeout(r, 1000))"," in JavaScript, or ",[19,6092,6093],{},"time.sleep(1)"," in Python",[38,6096,6097,6098,6101],{},"Use the ",[42,6099,6100],{"href":4495},"Batch API"," instead of looping single calls - it processes up to 100 records per request",[38,6103,6104,6105,6108],{},"If you consistently need higher throughput, ",[42,6106,6107],{"href":4993},"contact us"," about upgrading your tier",[4571,6110,6112],{"id":6111},"cors-policy-error","CORS Policy Error",[80,6114,6117],{"className":6115,"code":6116,"language":2834},[5100],"Access to fetch at 'https:\u002F\u002Fdeveloper.townshipcanada.com\u002F...' has been blocked by CORS policy\n",[19,6118,6116],{"__ignoreMap":85},[15,6120,6121,6123],{},[50,6122,5976],{}," You are calling the API directly from a browser (client-side JavaScript). The API is designed for server-to-server calls and does not include CORS headers by default.",[15,6125,6126],{},[50,6127,6128],{},"Fix options:",[5059,6130,6131,6137],{},[38,6132,6133,6136],{},[50,6134,6135],{},"Proxy through your backend"," - Make the API call from your server (Node.js, Python, etc.) and return the result to your frontend",[38,6138,6139,6141],{},[50,6140,4994],{}," - If you need direct browser access, we can add your domain to the CORS allowlist",[4571,6143,6145],{"id":6144},"empty-response-no-features","Empty Response (no features)",[15,6147,6148],{},"The API returns a valid HTTP 200 response, but the result contains no features or coordinates.",[15,6150,6151],{},[50,6152,6153],{},"Possible causes:",[35,6155,6156,6159,6162],{},[38,6157,6158],{},"The legal description does not exist (e.g., a township\u002Frange combination that was never surveyed)",[38,6160,6161],{},"The description is at a resolution not supported for that region",[38,6163,6164],{},"Format is slightly wrong - the API is stricter than the web app",[15,6166,6167],{},[50,6168,6169],{},"Debugging steps:",[5059,6171,6172,6180,6190,6193],{},[38,6173,6174,6175,6179],{},"Try the same description in the ",[42,6176,6178],{"href":6177},"\u002Fapp","web app search box"," - does it work there?",[38,6181,6182,6183,6186,6187,233],{},"Check that you included the full meridian (e.g., ",[19,6184,6185],{},"W5"," not just ",[19,6188,6189],{},"5",[38,6191,6192],{},"Verify component ranges: LSD 1–16, Section 1–36, Township 1–126, Range 1–34",[38,6194,6195,6196,6200],{},"Check the ",[42,6197,6199],{"href":6198},"\u002Fguides\u002Fcoverage","Coverage Guide"," for resolution limits by region",[4571,6202,6204],{"id":6203},"database-errors-28000-08006","Database Errors (28000, 08006)",[15,6206,6207,6208,6211,6212,6215],{},"Errors with codes like ",[19,6209,6210],{},"28000"," or ",[19,6213,6214],{},"08006"," indicate a service disruption, not an issue with your code.",[15,6217,6218],{},[50,6219,6220],{},"What to do:",[35,6222,6223,6231,6234],{},[38,6224,6195,6225,6230],{},[42,6226,6229],{"href":6227,"rel":6228},"https:\u002F\u002Fstatus.townshipcanada.com\u002F",[4950],"status page"," for incident reports",[38,6232,6233],{},"Wait a few minutes and retry",[38,6235,6236,6237],{},"If the issue persists beyond 15 minutes, ",[42,6238,6107],{"href":4993},[10,6240,6242],{"id":6241},"api-key-setup","API key setup",[15,6244,6245,6246,6249],{},"Quick recap of key setup (see the ",[42,6247,6248],{"href":5919},"full API key management guide"," for details):",[5059,6251,6252,6258,6267,6273,6279],{},[38,6253,6254,6257],{},[50,6255,6256],{},"Find your key:"," My Account → API Access",[38,6259,6260,6263,6264,6266],{},[50,6261,6262],{},"Include in requests:"," Add the ",[19,6265,424],{}," header to every request",[38,6268,6269,6272],{},[50,6270,6271],{},"Test before coding:"," Use curl or Postman to confirm the key works",[38,6274,6275,6278],{},[50,6276,6277],{},"Name your keys:"," Use descriptive names like \"production-backend\" or \"staging-test\" to keep track of which key is used where",[38,6280,6281,6284],{},[50,6282,6283],{},"Rotate regularly:"," Generate new keys periodically and phase out old ones",[10,6286,6288],{"id":6287},"rate-limiting-best-practices","Rate limiting best practices",[4571,6290,6292],{"id":6291},"add-delay-between-requests","Add delay between requests",[80,6294,6296],{"className":145,"code":6295,"language":147,"meta":85,"style":85},"\u002F\u002F JavaScript - simple delay\nfor (const query of queries) {\n  const result = await fetch(url + query, { headers });\n  await new Promise((r) => setTimeout(r, 1000));\n}\n",[19,6297,6298,6303,6324,6359,6397],{"__ignoreMap":85},[89,6299,6300],{"class":91,"line":92},[89,6301,6302],{"class":488},"\u002F\u002F JavaScript - simple delay\n",[89,6304,6305,6308,6310,6312,6314,6317,6320,6322],{"class":91,"line":103},[89,6306,6307],{"class":364},"for",[89,6309,565],{"class":389},[89,6311,1531],{"class":154},[89,6313,1623],{"class":158},[89,6315,6316],{"class":194}," of",[89,6318,6319],{"class":158}," queries",[89,6321,233],{"class":389},[89,6323,183],{"class":95},[89,6325,6326,6328,6331,6333,6335,6337,6339,6342,6345,6347,6349,6351,6353,6355,6357],{"class":91,"line":110},[89,6327,356],{"class":154},[89,6329,6330],{"class":158}," result",[89,6332,191],{"class":95},[89,6334,365],{"class":364},[89,6336,368],{"class":176},[89,6338,213],{"class":212},[89,6340,6341],{"class":158},"url",[89,6343,6344],{"class":194}," +",[89,6346,1623],{"class":158},[89,6348,236],{"class":95},[89,6350,251],{"class":95},[89,6352,3286],{"class":158},[89,6354,735],{"class":95},[89,6356,233],{"class":212},[89,6358,162],{"class":95},[89,6360,6361,6364,6366,6370,6372,6374,6377,6379,6381,6384,6386,6388,6390,6393,6395],{"class":91,"line":130},[89,6362,6363],{"class":364},"  await",[89,6365,195],{"class":194},[89,6367,6369],{"class":6368},"sa2tF"," Promise",[89,6371,213],{"class":212},[89,6373,213],{"class":95},[89,6375,6376],{"class":346},"r",[89,6378,233],{"class":95},[89,6380,524],{"class":523},[89,6382,6383],{"class":176}," setTimeout",[89,6385,213],{"class":212},[89,6387,6376],{"class":158},[89,6389,236],{"class":95},[89,6391,6392],{"class":259}," 1000",[89,6394,872],{"class":212},[89,6396,162],{"class":95},[89,6398,6399],{"class":91,"line":241},[89,6400,303],{"class":95},[80,6402,6404],{"className":5399,"code":6403,"language":5372,"meta":85,"style":85},"# Python - simple delay\nimport time\nfor query in queries:\n    result = requests.get(url + query, headers=headers)\n    time.sleep(1)\n",[19,6405,6406,6411,6418,6432,6466],{"__ignoreMap":85},[89,6407,6408],{"class":91,"line":92},[89,6409,6410],{"class":488},"# Python - simple delay\n",[89,6412,6413,6415],{"class":91,"line":103},[89,6414,5407],{"class":364},[89,6416,6417],{"class":2257}," time\n",[89,6419,6420,6422,6425,6428,6430],{"class":91,"line":110},[89,6421,6307],{"class":364},[89,6423,6424],{"class":2257}," query ",[89,6426,6427],{"class":364},"in",[89,6429,6319],{"class":2257},[89,6431,5725],{"class":95},[89,6433,6434,6437,6439,6441,6443,6445,6447,6450,6453,6455,6457,6459,6461,6464],{"class":91,"line":130},[89,6435,6436],{"class":2257},"    result ",[89,6438,116],{"class":95},[89,6440,5494],{"class":2257},[89,6442,201],{"class":95},[89,6444,5468],{"class":5439},[89,6446,213],{"class":95},[89,6448,6449],{"class":5439},"url ",[89,6451,6452],{"class":194},"+",[89,6454,1623],{"class":5439},[89,6456,236],{"class":95},[89,6458,3286],{"class":346},[89,6460,116],{"class":95},[89,6462,6463],{"class":5439},"headers",[89,6465,5480],{"class":95},[89,6467,6468,6471,6473,6476,6478,6481],{"class":91,"line":241},[89,6469,6470],{"class":2257},"    time",[89,6472,201],{"class":95},[89,6474,6475],{"class":5439},"sleep",[89,6477,213],{"class":95},[89,6479,6480],{"class":259},"1",[89,6482,5480],{"class":95},[4571,6484,6486],{"id":6485},"use-exponential-backoff-on-429","Use exponential backoff on 429",[80,6488,6490],{"className":145,"code":6489,"language":147,"meta":85,"style":85},"async function fetchWithBackoff(url, headers, maxRetries = 3) {\n  for (let i = 0; i \u003C maxRetries; i++) {\n    const res = await fetch(url, { headers });\n    if (res.status !== 429) return res;\n    await new Promise((r) => setTimeout(r, 1000 * Math.pow(2, i)));\n  }\n  throw new Error(\"Rate limit exceeded after retries\");\n}\n",[19,6491,6492,6522,6558,6586,6615,6669,6673,6696],{"__ignoreMap":85},[89,6493,6494,6496,6498,6501,6503,6505,6507,6509,6511,6514,6516,6518,6520],{"class":91,"line":92},[89,6495,335],{"class":154},[89,6497,338],{"class":154},[89,6499,6500],{"class":176}," fetchWithBackoff",[89,6502,213],{"class":95},[89,6504,6341],{"class":346},[89,6506,236],{"class":95},[89,6508,3286],{"class":346},[89,6510,236],{"class":95},[89,6512,6513],{"class":346}," maxRetries",[89,6515,191],{"class":95},[89,6517,1661],{"class":259},[89,6519,233],{"class":95},[89,6521,183],{"class":95},[89,6523,6524,6527,6529,6531,6534,6536,6538,6541,6543,6545,6547,6549,6551,6554,6556],{"class":91,"line":103},[89,6525,6526],{"class":364},"  for",[89,6528,565],{"class":212},[89,6530,155],{"class":154},[89,6532,6533],{"class":158}," i",[89,6535,191],{"class":95},[89,6537,2292],{"class":259},[89,6539,6540],{"class":95},";",[89,6542,6533],{"class":158},[89,6544,1658],{"class":95},[89,6546,6513],{"class":158},[89,6548,6540],{"class":95},[89,6550,6533],{"class":158},[89,6552,6553],{"class":194},"++",[89,6555,233],{"class":212},[89,6557,183],{"class":95},[89,6559,6560,6562,6564,6566,6568,6570,6572,6574,6576,6578,6580,6582,6584],{"class":91,"line":110},[89,6561,1849],{"class":154},[89,6563,3243],{"class":158},[89,6565,191],{"class":95},[89,6567,365],{"class":364},[89,6569,368],{"class":176},[89,6571,213],{"class":212},[89,6573,6341],{"class":158},[89,6575,236],{"class":95},[89,6577,251],{"class":95},[89,6579,3286],{"class":158},[89,6581,735],{"class":95},[89,6583,233],{"class":212},[89,6585,162],{"class":95},[89,6587,6588,6591,6593,6596,6598,6601,6604,6607,6609,6611,6613],{"class":91,"line":130},[89,6589,6590],{"class":364},"    if",[89,6592,565],{"class":212},[89,6594,6595],{"class":158},"res",[89,6597,201],{"class":95},[89,6599,6600],{"class":158},"status",[89,6602,6603],{"class":194}," !==",[89,6605,6606],{"class":259}," 429",[89,6608,233],{"class":212},[89,6610,575],{"class":364},[89,6612,3243],{"class":158},[89,6614,162],{"class":95},[89,6616,6617,6620,6622,6624,6626,6628,6630,6632,6634,6636,6638,6640,6642,6644,6647,6650,6652,6655,6657,6660,6662,6664,6667],{"class":91,"line":241},[89,6618,6619],{"class":364},"    await",[89,6621,195],{"class":194},[89,6623,6369],{"class":6368},[89,6625,213],{"class":212},[89,6627,213],{"class":95},[89,6629,6376],{"class":346},[89,6631,233],{"class":95},[89,6633,524],{"class":523},[89,6635,6383],{"class":176},[89,6637,213],{"class":212},[89,6639,6376],{"class":158},[89,6641,236],{"class":95},[89,6643,6392],{"class":259},[89,6645,6646],{"class":194}," *",[89,6648,6649],{"class":158}," Math",[89,6651,201],{"class":95},[89,6653,6654],{"class":176},"pow",[89,6656,213],{"class":212},[89,6658,6659],{"class":259},"2",[89,6661,236],{"class":95},[89,6663,6533],{"class":158},[89,6665,6666],{"class":212},")))",[89,6668,162],{"class":95},[89,6670,6671],{"class":91,"line":279},[89,6672,1694],{"class":95},[89,6674,6675,6678,6680,6683,6685,6687,6690,6692,6694],{"class":91,"line":290},[89,6676,6677],{"class":364},"  throw",[89,6679,195],{"class":194},[89,6681,6682],{"class":176}," Error",[89,6684,213],{"class":212},[89,6686,120],{"class":119},[89,6688,6689],{"class":123},"Rate limit exceeded after retries",[89,6691,120],{"class":119},[89,6693,233],{"class":212},[89,6695,162],{"class":95},[89,6697,6698],{"class":91,"line":300},[89,6699,303],{"class":95},[4571,6701,6703],{"id":6702},"use-the-batch-api-for-bulk-work","Use the Batch API for bulk work",[15,6705,6706],{},"Instead of looping 1,000 single calls (which takes 17+ minutes at 1\u002Fsec), use the Batch API to process 100 records per call - the same 1,000 records take 10 calls.",[15,6708,6709,6710,6712],{},"See the ",[42,6711,4521],{"href":4495}," for chunking examples in Node.js and Python.",[10,6714,6716],{"id":6715},"format-differences-web-app-vs-api","Format differences: web app vs. API",[15,6718,6719],{},"The web app's search box is more forgiving than the API:",[4671,6721,6722,6734],{},[4674,6723,6724],{},[4677,6725,6726,6729,6732],{},[4680,6727,6728],{},"Issue",[4680,6730,6731],{},"Web App",[4680,6733,4580],{},[4693,6735,6736,6747,6758,6767],{},[4677,6737,6738,6741,6744],{},[4698,6739,6740],{},"Missing \"W\" on meridian",[4698,6742,6743],{},"May auto-correct",[4698,6745,6746],{},"Returns empty",[4677,6748,6749,6752,6755],{},[4698,6750,6751],{},"Extra spaces",[4698,6753,6754],{},"Handled",[4698,6756,6757],{},"May cause issues",[4677,6759,6760,6763,6765],{},[4698,6761,6762],{},"Mixed case",[4698,6764,6754],{},[4698,6766,6754],{},[4677,6768,6769,6772,6775],{},[4698,6770,6771],{},"Partial descriptions",[4698,6773,6774],{},"Shows suggestions",[4698,6776,6746],{},[15,6778,6779],{},"When building API integrations, always normalize your input first:",[35,6781,6782,6785,6788,6791],{},[38,6783,6784],{},"Include dashes between all components",[38,6786,6787],{},"Add the \"W\" prefix on meridians",[38,6789,6790],{},"Remove extra text, parentheses, and place names",[38,6792,6793],{},"Trim whitespace",[10,6795,6797],{"id":6796},"integration-patterns","Integration patterns",[4571,6799,6801],{"id":6800},"caching","Caching",[15,6803,6804,6805,6808],{},"If your application looks up the same legal descriptions repeatedly, cache the results. Legal land descriptions map to fixed coordinates - the result for ",[19,6806,6807],{},"SW-25-24-1-W5"," will not change.",[4571,6810,6812],{"id":6811},"error-handling","Error handling",[15,6814,6815],{},"Always handle these response codes:",[35,6817,6818,6824,6830,6836,6842],{},[38,6819,6820,6823],{},[50,6821,6822],{},"200"," - Success, parse the result",[38,6825,6826,6829],{},[50,6827,6828],{},"400"," - Bad request, check your input format",[38,6831,6832,6835],{},[50,6833,6834],{},"403"," - Authentication failed, check your API key",[38,6837,6838,6841],{},[50,6839,6840],{},"429"," - Rate limited, wait and retry",[38,6843,6844,6847],{},[50,6845,6846],{},"500\u002F502\u002F503"," - Server issue, retry after a short delay",[4571,6849,6851],{"id":6850},"openapi-spec","OpenAPI spec",[15,6853,6854,6855,6858],{},"Download the OpenAPI specification at ",[42,6856,6857],{"href":6857},"\u002Fopenapi.yaml"," and import it into Postman, Swagger UI, or Insomnia for interactive testing and documentation.",[10,6860,4955],{"id":4503},[35,6862,6863,6869,6875,6882,6887],{},[38,6864,6865,6868],{},[42,6866,6867],{"href":4487},"API Integration Guide"," - getting started with the API",[38,6870,6871,6874],{},[42,6872,6873],{"href":5919},"API Key Management"," - creating and managing API keys",[38,6876,6877,6881],{},[42,6878,6880],{"href":6879},"\u002Fguides\u002Fsearch-api-guide","Search API Guide"," - single-location lookups",[38,6883,6884,6886],{},[42,6885,4521],{"href":4495}," - bulk conversions",[38,6888,6889,6892],{},[42,6890,6891],{"href":6198},"Coverage & Limitations"," - what regions and resolutions are supported",[1920,6894,6895],{},"html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s4Jsk, html code.shiki .s4Jsk{--shiki-light:#39ADB5;--shiki-default:#99841877;--shiki-dark:#B8A96577}html pre.shiki code .sLorS, html code.shiki .sLorS{--shiki-light:#9C3EDA;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}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 .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .snCua, html code.shiki .snCua{--shiki-light:#90A4AE;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sLdnO, html code.shiki .sLdnO{--shiki-light:#E53935;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .sIOqK, html code.shiki .sIOqK{--shiki-light:#9C3EDA;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}",{"title":85,"searchDepth":103,"depth":103,"links":6897},[6898,6905,6906,6911,6912,6917],{"id":5936,"depth":103,"text":5937,"children":6899},[6900,6901,6902,6903,6904],{"id":5940,"depth":110,"text":5941},{"id":6038,"depth":110,"text":6039},{"id":6111,"depth":110,"text":6112},{"id":6144,"depth":110,"text":6145},{"id":6203,"depth":110,"text":6204},{"id":6241,"depth":103,"text":6242},{"id":6287,"depth":103,"text":6288,"children":6907},[6908,6909,6910],{"id":6291,"depth":110,"text":6292},{"id":6485,"depth":110,"text":6486},{"id":6702,"depth":110,"text":6703},{"id":6715,"depth":103,"text":6716},{"id":6796,"depth":103,"text":6797,"children":6913},[6914,6915,6916],{"id":6800,"depth":110,"text":6801},{"id":6811,"depth":110,"text":6812},{"id":6850,"depth":110,"text":6851},{"id":4503,"depth":103,"text":4955},"Fix common Township Canada API errors including Forbidden responses, CORS issues, rate limiting, and empty results. Includes debugging tips and integration patterns.","i-lucide-bug",{},"\u002Fguides\u002Fapi-troubleshooting",{"title":5925,"description":6918},"guides\u002Fapi-troubleshooting","YhFOkUOkxRyXExvO-F29ZJyxlbLEw9dMy2FCmSMog7U"]