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