[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"guide-maps-api-vector-tiles":3,"related-maps-api-vector-tiles":2886},{"id":4,"title":5,"body":6,"category":2876,"description":2877,"draft":2878,"extension":2879,"icon":2880,"meta":2881,"navigation":450,"order":485,"path":2882,"seo":2883,"stem":2884,"__hash__":2885},"guides\u002Fguides\u002Fmaps-api-vector-tiles.md","Maps API - Vector Tile Reference",{"type":7,"value":8,"toc":2858},"minimark",[9,13,16,21,32,51,57,63,68,74,77,83,88,94,97,101,106,118,125,316,321,918,920,924,929,986,988,992,997,1171,1173,1177,1182,1312,1314,1318,1325,1328,1511,1516,2003,2005,2009,2012,2016,2084,2087,2188,2192,2267,2269,2273,2279,2285,2469,2475,2651,2657,2669,2671,2675,2808,2810,2814,2854],[10,11,12],"p",{},"The Maps API serves Canadian survey grids and geographic data as Mapbox Vector Tiles (MVT). This reference covers every available tileset, their source layers, tile URL patterns, recommended zoom ranges, and styling values.",[10,14,15],{},"For step-by-step integration examples, see the library-specific guides linked at the bottom of this page.",[17,18,20],"h2",{"id":19},"tile-url-pattern","Tile URL pattern",[22,23,28],"pre",{"className":24,"code":26,"language":27},[25],"language-text","https:\u002F\u002Fmaps.townshipcanada.com\u002F{province}\u002F{layer}\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY\n","text",[29,30,26],"code",{"__ignoreMap":31},"",[10,33,34,35,38,39,38,42,38,45,38,48],{},"Supported provinces: ",[29,36,37],{},"ab",", ",[29,40,41],{},"sk",[29,43,44],{},"mb",[29,46,47],{},"bc",[29,49,50],{},"on",[10,52,53],{},[54,55,56],"strong",{},"Example - Alberta township boundaries:",[22,58,61],{"className":59,"code":60,"language":27},[25],"https:\u002F\u002Fmaps.townshipcanada.com\u002Fab\u002Ftwp\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY\n",[29,62,60],{"__ignoreMap":31},[10,64,65],{},[54,66,67],{},"Example - Saskatchewan sections:",[22,69,72],{"className":70,"code":71,"language":27},[25],"https:\u002F\u002Fmaps.townshipcanada.com\u002Fsk\u002Fsec\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY\n",[29,73,71],{"__ignoreMap":31},[10,75,76],{},"Data layers use the same base URL without a province prefix:",[22,78,81],{"className":79,"code":80,"language":27},[25],"https:\u002F\u002Fmaps.townshipcanada.com\u002F{data_layer}\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY\n",[29,82,80],{"__ignoreMap":31},[10,84,85],{},[54,86,87],{},"Example - oil and gas field boundaries:",[22,89,92],{"className":90,"code":91,"language":27},[25],"https:\u002F\u002Fmaps.townshipcanada.com\u002Foil_gas_fields\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY\n",[29,93,91],{"__ignoreMap":31},[95,96],"hr",{},[17,98,100],{"id":99},"grid-layers-by-province","Grid layers by province",[102,103,105],"h3",{"id":104},"dls-grid-alberta-saskatchewan-manitoba-bc-peace-river","DLS grid - Alberta, Saskatchewan, Manitoba, BC Peace River",[10,107,108,109,38,111,38,113,38,115,117],{},"The Dominion Land Survey (DLS) system covers Alberta, Saskatchewan, Manitoba, and the Peace River region of British Columbia. Available for provinces: ",[29,110,37],{},[29,112,41],{},[29,114,44],{},[29,116,47],{},".",[10,119,120,121,124],{},"Replace ",[29,122,123],{},"{prov}"," with the province code in the source-layer column.",[126,127,128,150],"table",{},[129,130,131],"thead",{},[132,133,134,138,141,144,147],"tr",{},[135,136,137],"th",{},"URL layer",[135,139,140],{},"source-layer",[135,142,143],{},"text-field",[135,145,146],{},"Source zoom",[135,148,149],{},"Layer zoom",[151,152,153,175,197,217,238,256,276,295],"tbody",{},[132,154,155,161,166,169,172],{},[156,157,158],"td",{},[29,159,160],{},"twp",[156,162,163],{},[29,164,165],{},"{prov}_twp",[156,167,168],{},"-",[156,170,171],{},"0–14",[156,173,174],{},"6–12",[132,176,177,182,187,192,194],{},[156,178,179],{},[29,180,181],{},"twp-label",[156,183,184],{},[29,185,186],{},"{prov}_twp_label",[156,188,189],{},[29,190,191],{},"{descriptor}",[156,193,171],{},[156,195,196],{},"10–12",[132,198,199,204,209,211,214],{},[156,200,201],{},[29,202,203],{},"sec",[156,205,206],{},[29,207,208],{},"{prov}_sec",[156,210,168],{},[156,212,213],{},"9–14",[156,215,216],{},"12–14",[132,218,219,224,229,234,236],{},[156,220,221],{},[29,222,223],{},"sec-label",[156,225,226],{},[29,227,228],{},"{prov}_sec_label",[156,230,231],{},[29,232,233],{},"{section}",[156,235,213],{},[156,237,216],{},[132,239,240,245,250,252,254],{},[156,241,242],{},[29,243,244],{},"qtr",[156,246,247],{},[29,248,249],{},"{prov}_qtr",[156,251,168],{},[156,253,213],{},[156,255,216],{},[132,257,258,263,268,272,274],{},[156,259,260],{},[29,261,262],{},"qtr-label",[156,264,265],{},[29,266,267],{},"{prov}_qtr_label",[156,269,270],{},[29,271,191],{},[156,273,213],{},[156,275,216],{},[132,277,278,283,288,290,292],{},[156,279,280],{},[29,281,282],{},"lsd",[156,284,285],{},[29,286,287],{},"{prov}_lsd",[156,289,168],{},[156,291,213],{},[156,293,294],{},"14–20",[132,296,297,302,307,312,314],{},[156,298,299],{},[29,300,301],{},"lsd-label",[156,303,304],{},[29,305,306],{},"{prov}_lsd_label",[156,308,309],{},[29,310,311],{},"{lsd}",[156,313,213],{},[156,315,294],{},[10,317,318],{},[54,319,320],{},"Example - Alberta township boundaries and labels:",[22,322,326],{"className":323,"code":324,"language":325,"meta":31,"style":31},"language-javascript shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","map.addSource(\"ab_twp\", {\n  type: \"vector\",\n  tiles: [\"https:\u002F\u002Fmaps.townshipcanada.com\u002Fab\u002Ftwp\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY\"],\n  minzoom: 0,\n  maxzoom: 14\n});\n\nmap.addLayer({\n  id: \"ab_twp\",\n  type: \"line\",\n  source: \"ab_twp\",\n  \"source-layer\": \"ab_twp\",\n  minzoom: 6,\n  maxzoom: 12,\n  paint: { \"line-color\": \"#2d5a47\", \"line-width\": 1.5 }\n});\n\nmap.addSource(\"ab_twp_label\", {\n  type: \"vector\",\n  tiles: [\"https:\u002F\u002Fmaps.townshipcanada.com\u002Fab\u002Ftwp-label\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY\"],\n  minzoom: 0,\n  maxzoom: 14\n});\n\nmap.addLayer({\n  id: \"ab_twp_label\",\n  type: \"symbol\",\n  source: \"ab_twp_label\",\n  \"source-layer\": \"ab_twp_label\",\n  minzoom: 10,\n  maxzoom: 12,\n  layout: { \"text-field\": \"{descriptor}\", \"text-size\": 14 },\n  paint: { \"text-color\": \"#333\", \"text-halo-color\": \"#fff\", \"text-halo-width\": 2 }\n});\n","javascript",[29,327,328,364,385,408,422,433,445,452,467,483,498,514,535,547,559,603,612,617,639,654,674,685,694,703,708,721,736,752,767,786,798,809,850,909],{"__ignoreMap":31},[329,330,333,337,340,344,348,352,356,358,361],"span",{"class":331,"line":332},"line",1,[329,334,336],{"class":335},"sSC40","map",[329,338,117],{"class":339},"soVBu",[329,341,343],{"class":342},"sljsM","addSource",[329,345,347],{"class":346},"snCua","(",[329,349,351],{"class":350},"sbYkP","\"",[329,353,355],{"class":354},"sTbE_","ab_twp",[329,357,351],{"class":350},[329,359,360],{"class":339},",",[329,362,363],{"class":339}," {\n",[329,365,367,371,374,377,380,382],{"class":331,"line":366},2,[329,368,370],{"class":369},"suXOh","  type",[329,372,373],{"class":339},":",[329,375,376],{"class":350}," \"",[329,378,379],{"class":354},"vector",[329,381,351],{"class":350},[329,383,384],{"class":339},",\n",[329,386,388,391,393,396,398,401,403,406],{"class":331,"line":387},3,[329,389,390],{"class":369},"  tiles",[329,392,373],{"class":339},[329,394,395],{"class":346}," [",[329,397,351],{"class":350},[329,399,400],{"class":354},"https:\u002F\u002Fmaps.townshipcanada.com\u002Fab\u002Ftwp\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY",[329,402,351],{"class":350},[329,404,405],{"class":346},"]",[329,407,384],{"class":339},[329,409,411,414,416,420],{"class":331,"line":410},4,[329,412,413],{"class":369},"  minzoom",[329,415,373],{"class":339},[329,417,419],{"class":418},"s7CZa"," 0",[329,421,384],{"class":339},[329,423,425,428,430],{"class":331,"line":424},5,[329,426,427],{"class":369},"  maxzoom",[329,429,373],{"class":339},[329,431,432],{"class":418}," 14\n",[329,434,436,439,442],{"class":331,"line":435},6,[329,437,438],{"class":339},"}",[329,440,441],{"class":346},")",[329,443,444],{"class":339},";\n",[329,446,448],{"class":331,"line":447},7,[329,449,451],{"emptyLinePlaceholder":450},true,"\n",[329,453,455,457,459,462,464],{"class":331,"line":454},8,[329,456,336],{"class":335},[329,458,117],{"class":339},[329,460,461],{"class":342},"addLayer",[329,463,347],{"class":346},[329,465,466],{"class":339},"{\n",[329,468,470,473,475,477,479,481],{"class":331,"line":469},9,[329,471,472],{"class":369},"  id",[329,474,373],{"class":339},[329,476,376],{"class":350},[329,478,355],{"class":354},[329,480,351],{"class":350},[329,482,384],{"class":339},[329,484,486,488,490,492,494,496],{"class":331,"line":485},10,[329,487,370],{"class":369},[329,489,373],{"class":339},[329,491,376],{"class":350},[329,493,331],{"class":354},[329,495,351],{"class":350},[329,497,384],{"class":339},[329,499,501,504,506,508,510,512],{"class":331,"line":500},11,[329,502,503],{"class":369},"  source",[329,505,373],{"class":339},[329,507,376],{"class":350},[329,509,355],{"class":354},[329,511,351],{"class":350},[329,513,384],{"class":339},[329,515,517,520,523,525,527,529,531,533],{"class":331,"line":516},12,[329,518,519],{"class":350},"  \"",[329,521,140],{"class":522},"sQtxO",[329,524,351],{"class":350},[329,526,373],{"class":339},[329,528,376],{"class":350},[329,530,355],{"class":354},[329,532,351],{"class":350},[329,534,384],{"class":339},[329,536,538,540,542,545],{"class":331,"line":537},13,[329,539,413],{"class":369},[329,541,373],{"class":339},[329,543,544],{"class":418}," 6",[329,546,384],{"class":339},[329,548,550,552,554,557],{"class":331,"line":549},14,[329,551,427],{"class":369},[329,553,373],{"class":339},[329,555,556],{"class":418}," 12",[329,558,384],{"class":339},[329,560,562,565,567,570,572,575,577,579,581,584,586,588,590,593,595,597,600],{"class":331,"line":561},15,[329,563,564],{"class":369},"  paint",[329,566,373],{"class":339},[329,568,569],{"class":339}," {",[329,571,376],{"class":350},[329,573,574],{"class":522},"line-color",[329,576,351],{"class":350},[329,578,373],{"class":339},[329,580,376],{"class":350},[329,582,583],{"class":354},"#2d5a47",[329,585,351],{"class":350},[329,587,360],{"class":339},[329,589,376],{"class":350},[329,591,592],{"class":522},"line-width",[329,594,351],{"class":350},[329,596,373],{"class":339},[329,598,599],{"class":418}," 1.5",[329,601,602],{"class":339}," }\n",[329,604,606,608,610],{"class":331,"line":605},16,[329,607,438],{"class":339},[329,609,441],{"class":346},[329,611,444],{"class":339},[329,613,615],{"class":331,"line":614},17,[329,616,451],{"emptyLinePlaceholder":450},[329,618,620,622,624,626,628,630,633,635,637],{"class":331,"line":619},18,[329,621,336],{"class":335},[329,623,117],{"class":339},[329,625,343],{"class":342},[329,627,347],{"class":346},[329,629,351],{"class":350},[329,631,632],{"class":354},"ab_twp_label",[329,634,351],{"class":350},[329,636,360],{"class":339},[329,638,363],{"class":339},[329,640,642,644,646,648,650,652],{"class":331,"line":641},19,[329,643,370],{"class":369},[329,645,373],{"class":339},[329,647,376],{"class":350},[329,649,379],{"class":354},[329,651,351],{"class":350},[329,653,384],{"class":339},[329,655,657,659,661,663,665,668,670,672],{"class":331,"line":656},20,[329,658,390],{"class":369},[329,660,373],{"class":339},[329,662,395],{"class":346},[329,664,351],{"class":350},[329,666,667],{"class":354},"https:\u002F\u002Fmaps.townshipcanada.com\u002Fab\u002Ftwp-label\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY",[329,669,351],{"class":350},[329,671,405],{"class":346},[329,673,384],{"class":339},[329,675,677,679,681,683],{"class":331,"line":676},21,[329,678,413],{"class":369},[329,680,373],{"class":339},[329,682,419],{"class":418},[329,684,384],{"class":339},[329,686,688,690,692],{"class":331,"line":687},22,[329,689,427],{"class":369},[329,691,373],{"class":339},[329,693,432],{"class":418},[329,695,697,699,701],{"class":331,"line":696},23,[329,698,438],{"class":339},[329,700,441],{"class":346},[329,702,444],{"class":339},[329,704,706],{"class":331,"line":705},24,[329,707,451],{"emptyLinePlaceholder":450},[329,709,711,713,715,717,719],{"class":331,"line":710},25,[329,712,336],{"class":335},[329,714,117],{"class":339},[329,716,461],{"class":342},[329,718,347],{"class":346},[329,720,466],{"class":339},[329,722,724,726,728,730,732,734],{"class":331,"line":723},26,[329,725,472],{"class":369},[329,727,373],{"class":339},[329,729,376],{"class":350},[329,731,632],{"class":354},[329,733,351],{"class":350},[329,735,384],{"class":339},[329,737,739,741,743,745,748,750],{"class":331,"line":738},27,[329,740,370],{"class":369},[329,742,373],{"class":339},[329,744,376],{"class":350},[329,746,747],{"class":354},"symbol",[329,749,351],{"class":350},[329,751,384],{"class":339},[329,753,755,757,759,761,763,765],{"class":331,"line":754},28,[329,756,503],{"class":369},[329,758,373],{"class":339},[329,760,376],{"class":350},[329,762,632],{"class":354},[329,764,351],{"class":350},[329,766,384],{"class":339},[329,768,770,772,774,776,778,780,782,784],{"class":331,"line":769},29,[329,771,519],{"class":350},[329,773,140],{"class":522},[329,775,351],{"class":350},[329,777,373],{"class":339},[329,779,376],{"class":350},[329,781,632],{"class":354},[329,783,351],{"class":350},[329,785,384],{"class":339},[329,787,789,791,793,796],{"class":331,"line":788},30,[329,790,413],{"class":369},[329,792,373],{"class":339},[329,794,795],{"class":418}," 10",[329,797,384],{"class":339},[329,799,801,803,805,807],{"class":331,"line":800},31,[329,802,427],{"class":369},[329,804,373],{"class":339},[329,806,556],{"class":418},[329,808,384],{"class":339},[329,810,812,815,817,819,821,823,825,827,829,831,833,835,837,840,842,844,847],{"class":331,"line":811},32,[329,813,814],{"class":369},"  layout",[329,816,373],{"class":339},[329,818,569],{"class":339},[329,820,376],{"class":350},[329,822,143],{"class":522},[329,824,351],{"class":350},[329,826,373],{"class":339},[329,828,376],{"class":350},[329,830,191],{"class":354},[329,832,351],{"class":350},[329,834,360],{"class":339},[329,836,376],{"class":350},[329,838,839],{"class":522},"text-size",[329,841,351],{"class":350},[329,843,373],{"class":339},[329,845,846],{"class":418}," 14",[329,848,849],{"class":339}," },\n",[329,851,853,855,857,859,861,864,866,868,870,873,875,877,879,882,884,886,888,891,893,895,897,900,902,904,907],{"class":331,"line":852},33,[329,854,564],{"class":369},[329,856,373],{"class":339},[329,858,569],{"class":339},[329,860,376],{"class":350},[329,862,863],{"class":522},"text-color",[329,865,351],{"class":350},[329,867,373],{"class":339},[329,869,376],{"class":350},[329,871,872],{"class":354},"#333",[329,874,351],{"class":350},[329,876,360],{"class":339},[329,878,376],{"class":350},[329,880,881],{"class":522},"text-halo-color",[329,883,351],{"class":350},[329,885,373],{"class":339},[329,887,376],{"class":350},[329,889,890],{"class":354},"#fff",[329,892,351],{"class":350},[329,894,360],{"class":339},[329,896,376],{"class":350},[329,898,899],{"class":522},"text-halo-width",[329,901,351],{"class":350},[329,903,373],{"class":339},[329,905,906],{"class":418}," 2",[329,908,602],{"class":339},[329,910,912,914,916],{"class":331,"line":911},34,[329,913,438],{"class":339},[329,915,441],{"class":346},[329,917,444],{"class":339},[95,919],{},[102,921,923],{"id":922},"river-lots-manitoba","River Lots - Manitoba",[10,925,926,927,117],{},"Manitoba includes river lot boundaries in addition to the DLS grid. Available for province: ",[29,928,44],{},[126,930,931,945],{},[129,932,933],{},[132,934,935,937,939,941,943],{},[135,936,137],{},[135,938,140],{},[135,940,143],{},[135,942,146],{},[135,944,149],{},[151,946,947,966],{},[132,948,949,954,959,961,963],{},[156,950,951],{},[29,952,953],{},"river-lots",[156,955,956],{},[29,957,958],{},"mb_river_lots",[156,960,168],{},[156,962,171],{},[156,964,965],{},"12–20",[132,967,968,973,978,982,984],{},[156,969,970],{},[29,971,972],{},"river-lots-label",[156,974,975],{},[29,976,977],{},"mb_river_lots_label",[156,979,980],{},[29,981,191],{},[156,983,171],{},[156,985,965],{},[95,987],{},[102,989,991],{"id":990},"nts-grid-british-columbia","NTS grid - British Columbia",[10,993,994,995,117],{},"Most of British Columbia uses the National Topographic System (NTS). NTS grid tiles cover four levels of the map sheet hierarchy. Available for province: ",[29,996,47],{},[126,998,999,1013],{},[129,1000,1001],{},[132,1002,1003,1005,1007,1009,1011],{},[135,1004,137],{},[135,1006,140],{},[135,1008,143],{},[135,1010,146],{},[135,1012,149],{},[151,1014,1015,1034,1055,1074,1094,1113,1133,1151],{},[132,1016,1017,1022,1027,1029,1031],{},[156,1018,1019],{},[29,1020,1021],{},"series",[156,1023,1024],{},[29,1025,1026],{},"bc_series",[156,1028,168],{},[156,1030,171],{},[156,1032,1033],{},"0–10",[132,1035,1036,1041,1046,1050,1052],{},[156,1037,1038],{},[29,1039,1040],{},"series-label",[156,1042,1043],{},[29,1044,1045],{},"bc_series_label",[156,1047,1048],{},[29,1049,191],{},[156,1051,171],{},[156,1053,1054],{},"7–10",[132,1056,1057,1062,1067,1069,1071],{},[156,1058,1059],{},[29,1060,1061],{},"block",[156,1063,1064],{},[29,1065,1066],{},"bc_block",[156,1068,168],{},[156,1070,213],{},[156,1072,1073],{},"10–13",[132,1075,1076,1081,1086,1090,1092],{},[156,1077,1078],{},[29,1079,1080],{},"block-label",[156,1082,1083],{},[29,1084,1085],{},"bc_block_label",[156,1087,1088],{},[29,1089,191],{},[156,1091,213],{},[156,1093,1073],{},[132,1095,1096,1101,1106,1108,1110],{},[156,1097,1098],{},[29,1099,1100],{},"unit",[156,1102,1103],{},[29,1104,1105],{},"bc_unit",[156,1107,168],{},[156,1109,213],{},[156,1111,1112],{},"13–14",[132,1114,1115,1120,1125,1129,1131],{},[156,1116,1117],{},[29,1118,1119],{},"unit-label",[156,1121,1122],{},[29,1123,1124],{},"bc_unit_label",[156,1126,1127],{},[29,1128,191],{},[156,1130,213],{},[156,1132,1112],{},[132,1134,1135,1140,1145,1147,1149],{},[156,1136,1137],{},[29,1138,1139],{},"qtr-unit",[156,1141,1142],{},[29,1143,1144],{},"bc_qtr_unit",[156,1146,168],{},[156,1148,213],{},[156,1150,294],{},[132,1152,1153,1158,1163,1167,1169],{},[156,1154,1155],{},[29,1156,1157],{},"qtr-unit-label",[156,1159,1160],{},[29,1161,1162],{},"bc_qtr_unit_label",[156,1164,1165],{},[29,1166,191],{},[156,1168,213],{},[156,1170,294],{},[95,1172],{},[102,1174,1176],{"id":1175},"geographic-townships-ontario","Geographic Townships - Ontario",[10,1178,1179,1180,117],{},"Ontario uses geographic townships with concessions and lots rather than DLS or NTS grids. Available for province: ",[29,1181,50],{},[126,1183,1184,1198],{},[129,1185,1186],{},[132,1187,1188,1190,1192,1194,1196],{},[135,1189,137],{},[135,1191,140],{},[135,1193,143],{},[135,1195,146],{},[135,1197,149],{},[151,1199,1200,1217,1236,1254,1274,1292],{},[132,1201,1202,1206,1211,1213,1215],{},[156,1203,1204],{},[29,1205,160],{},[156,1207,1208],{},[29,1209,1210],{},"on_twp",[156,1212,168],{},[156,1214,171],{},[156,1216,174],{},[132,1218,1219,1223,1228,1232,1234],{},[156,1220,1221],{},[29,1222,181],{},[156,1224,1225],{},[29,1226,1227],{},"on_twp_label",[156,1229,1230],{},[29,1231,191],{},[156,1233,171],{},[156,1235,174],{},[132,1237,1238,1243,1248,1250,1252],{},[156,1239,1240],{},[29,1241,1242],{},"con",[156,1244,1245],{},[29,1246,1247],{},"on_con",[156,1249,168],{},[156,1251,171],{},[156,1253,216],{},[132,1255,1256,1261,1266,1270,1272],{},[156,1257,1258],{},[29,1259,1260],{},"con-label",[156,1262,1263],{},[29,1264,1265],{},"on_con_label",[156,1267,1268],{},[29,1269,191],{},[156,1271,171],{},[156,1273,216],{},[132,1275,1276,1281,1286,1288,1290],{},[156,1277,1278],{},[29,1279,1280],{},"lot",[156,1282,1283],{},[29,1284,1285],{},"on_lot",[156,1287,168],{},[156,1289,171],{},[156,1291,294],{},[132,1293,1294,1299,1304,1308,1310],{},[156,1295,1296],{},[29,1297,1298],{},"lot-label",[156,1300,1301],{},[29,1302,1303],{},"on_lot_label",[156,1305,1306],{},[29,1307,191],{},[156,1309,171],{},[156,1311,294],{},[95,1313],{},[17,1315,1317],{"id":1316},"data-layers","Data layers",[10,1319,1320,1321,1324],{},"Data layers cover geographic and industrial features across Canada. All data tilesets use source zoom 0–12 - they do not contain data above zoom 12, so set your source ",[29,1322,1323],{},"maxzoom"," accordingly.",[10,1326,1327],{},"The source-layer name matches the tileset name. The label source-layer name matches the label tileset name.",[126,1329,1330,1348],{},[129,1331,1332],{},[132,1333,1334,1337,1340,1342,1345],{},[135,1335,1336],{},"Tileset",[135,1338,1339],{},"Label tileset",[135,1341,143],{},[135,1343,1344],{},"Placement",[135,1346,1347],{},"Description",[151,1349,1350,1373,1394,1415,1436,1455,1473,1492],{},[132,1351,1352,1357,1362,1367,1370],{},[156,1353,1354],{},[29,1355,1356],{},"oil_gas_fields",[156,1358,1359],{},[29,1360,1361],{},"oil_gas_fields_label",[156,1363,1364],{},[29,1365,1366],{},"{name}",[156,1368,1369],{},"point",[156,1371,1372],{},"Petroleum field boundaries",[132,1374,1375,1380,1385,1389,1391],{},[156,1376,1377],{},[29,1378,1379],{},"municipal_boundaries",[156,1381,1382],{},[29,1383,1384],{},"municipal_boundaries_label",[156,1386,1387],{},[29,1388,1366],{},[156,1390,1369],{},[156,1392,1393],{},"Municipal and county borders",[132,1395,1396,1401,1406,1410,1412],{},[156,1397,1398],{},[29,1399,1400],{},"parks_and_protected_areas",[156,1402,1403],{},[29,1404,1405],{},"parks_and_protected_areas_label",[156,1407,1408],{},[29,1409,1366],{},[156,1411,1369],{},[156,1413,1414],{},"National and provincial parks",[132,1416,1417,1422,1427,1431,1433],{},[156,1418,1419],{},[29,1420,1421],{},"water_bodies",[156,1423,1424],{},[29,1425,1426],{},"water_bodies_label",[156,1428,1429],{},[29,1430,1366],{},[156,1432,1369],{},[156,1434,1435],{},"Lakes and reservoirs",[132,1437,1438,1443,1446,1450,1452],{},[156,1439,1440],{},[29,1441,1442],{},"watercourses",[156,1444,1445],{},"(same tileset)",[156,1447,1448],{},[29,1449,1366],{},[156,1451,331],{},[156,1453,1454],{},"Rivers and streams",[132,1456,1457,1462,1464,1468,1470],{},[156,1458,1459],{},[29,1460,1461],{},"railways",[156,1463,1445],{},[156,1465,1466],{},[29,1467,1366],{},[156,1469,331],{},[156,1471,1472],{},"Railway lines",[132,1474,1475,1480,1482,1487,1489],{},[156,1476,1477],{},[29,1478,1479],{},"roads",[156,1481,1445],{},[156,1483,1484],{},[29,1485,1486],{},"{name}m",[156,1488,331],{},[156,1490,1491],{},"Road network",[132,1493,1494,1499,1501,1506,1508],{},[156,1495,1496],{},[29,1497,1498],{},"elevation",[156,1500,1445],{},[156,1502,1503],{},[29,1504,1505],{},"{elevation}m",[156,1507,331],{},[156,1509,1510],{},"Contour lines",[10,1512,1513],{},[54,1514,1515],{},"Example - oil and gas field boundaries with labels:",[22,1517,1519],{"className":323,"code":1518,"language":325,"meta":31,"style":31},"map.addSource(\"oil_gas_fields\", {\n  type: \"vector\",\n  tiles: [\"https:\u002F\u002Fmaps.townshipcanada.com\u002Foil_gas_fields\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY\"],\n  minzoom: 0,\n  maxzoom: 12\n});\n\nmap.addLayer({\n  id: \"oil_gas_fields\",\n  type: \"line\",\n  source: \"oil_gas_fields\",\n  \"source-layer\": \"oil_gas_fields\",\n  paint: { \"line-color\": \"#b45309\", \"line-width\": 1 }\n});\n\nmap.addSource(\"oil_gas_fields_label\", {\n  type: \"vector\",\n  tiles: [\n    \"https:\u002F\u002Fmaps.townshipcanada.com\u002Foil_gas_fields_label\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY\"\n  ],\n  minzoom: 0,\n  maxzoom: 12\n});\n\nmap.addLayer({\n  id: \"oil_gas_fields_label\",\n  type: \"symbol\",\n  source: \"oil_gas_fields_label\",\n  \"source-layer\": \"oil_gas_fields_label\",\n  layout: { \"text-field\": \"{name}\", \"text-size\": 12, \"symbol-placement\": \"point\" },\n  paint: { \"text-color\": \"#b45309\", \"text-halo-color\": \"#fff\", \"text-halo-width\": 1.5 }\n});\n",[29,1520,1521,1541,1555,1574,1584,1593,1601,1605,1617,1631,1645,1659,1677,1715,1723,1727,1747,1761,1770,1781,1788,1798,1806,1814,1818,1830,1844,1858,1872,1890,1943,1995],{"__ignoreMap":31},[329,1522,1523,1525,1527,1529,1531,1533,1535,1537,1539],{"class":331,"line":332},[329,1524,336],{"class":335},[329,1526,117],{"class":339},[329,1528,343],{"class":342},[329,1530,347],{"class":346},[329,1532,351],{"class":350},[329,1534,1356],{"class":354},[329,1536,351],{"class":350},[329,1538,360],{"class":339},[329,1540,363],{"class":339},[329,1542,1543,1545,1547,1549,1551,1553],{"class":331,"line":366},[329,1544,370],{"class":369},[329,1546,373],{"class":339},[329,1548,376],{"class":350},[329,1550,379],{"class":354},[329,1552,351],{"class":350},[329,1554,384],{"class":339},[329,1556,1557,1559,1561,1563,1565,1568,1570,1572],{"class":331,"line":387},[329,1558,390],{"class":369},[329,1560,373],{"class":339},[329,1562,395],{"class":346},[329,1564,351],{"class":350},[329,1566,1567],{"class":354},"https:\u002F\u002Fmaps.townshipcanada.com\u002Foil_gas_fields\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY",[329,1569,351],{"class":350},[329,1571,405],{"class":346},[329,1573,384],{"class":339},[329,1575,1576,1578,1580,1582],{"class":331,"line":410},[329,1577,413],{"class":369},[329,1579,373],{"class":339},[329,1581,419],{"class":418},[329,1583,384],{"class":339},[329,1585,1586,1588,1590],{"class":331,"line":424},[329,1587,427],{"class":369},[329,1589,373],{"class":339},[329,1591,1592],{"class":418}," 12\n",[329,1594,1595,1597,1599],{"class":331,"line":435},[329,1596,438],{"class":339},[329,1598,441],{"class":346},[329,1600,444],{"class":339},[329,1602,1603],{"class":331,"line":447},[329,1604,451],{"emptyLinePlaceholder":450},[329,1606,1607,1609,1611,1613,1615],{"class":331,"line":454},[329,1608,336],{"class":335},[329,1610,117],{"class":339},[329,1612,461],{"class":342},[329,1614,347],{"class":346},[329,1616,466],{"class":339},[329,1618,1619,1621,1623,1625,1627,1629],{"class":331,"line":469},[329,1620,472],{"class":369},[329,1622,373],{"class":339},[329,1624,376],{"class":350},[329,1626,1356],{"class":354},[329,1628,351],{"class":350},[329,1630,384],{"class":339},[329,1632,1633,1635,1637,1639,1641,1643],{"class":331,"line":485},[329,1634,370],{"class":369},[329,1636,373],{"class":339},[329,1638,376],{"class":350},[329,1640,331],{"class":354},[329,1642,351],{"class":350},[329,1644,384],{"class":339},[329,1646,1647,1649,1651,1653,1655,1657],{"class":331,"line":500},[329,1648,503],{"class":369},[329,1650,373],{"class":339},[329,1652,376],{"class":350},[329,1654,1356],{"class":354},[329,1656,351],{"class":350},[329,1658,384],{"class":339},[329,1660,1661,1663,1665,1667,1669,1671,1673,1675],{"class":331,"line":516},[329,1662,519],{"class":350},[329,1664,140],{"class":522},[329,1666,351],{"class":350},[329,1668,373],{"class":339},[329,1670,376],{"class":350},[329,1672,1356],{"class":354},[329,1674,351],{"class":350},[329,1676,384],{"class":339},[329,1678,1679,1681,1683,1685,1687,1689,1691,1693,1695,1698,1700,1702,1704,1706,1708,1710,1713],{"class":331,"line":537},[329,1680,564],{"class":369},[329,1682,373],{"class":339},[329,1684,569],{"class":339},[329,1686,376],{"class":350},[329,1688,574],{"class":522},[329,1690,351],{"class":350},[329,1692,373],{"class":339},[329,1694,376],{"class":350},[329,1696,1697],{"class":354},"#b45309",[329,1699,351],{"class":350},[329,1701,360],{"class":339},[329,1703,376],{"class":350},[329,1705,592],{"class":522},[329,1707,351],{"class":350},[329,1709,373],{"class":339},[329,1711,1712],{"class":418}," 1",[329,1714,602],{"class":339},[329,1716,1717,1719,1721],{"class":331,"line":549},[329,1718,438],{"class":339},[329,1720,441],{"class":346},[329,1722,444],{"class":339},[329,1724,1725],{"class":331,"line":561},[329,1726,451],{"emptyLinePlaceholder":450},[329,1728,1729,1731,1733,1735,1737,1739,1741,1743,1745],{"class":331,"line":605},[329,1730,336],{"class":335},[329,1732,117],{"class":339},[329,1734,343],{"class":342},[329,1736,347],{"class":346},[329,1738,351],{"class":350},[329,1740,1361],{"class":354},[329,1742,351],{"class":350},[329,1744,360],{"class":339},[329,1746,363],{"class":339},[329,1748,1749,1751,1753,1755,1757,1759],{"class":331,"line":614},[329,1750,370],{"class":369},[329,1752,373],{"class":339},[329,1754,376],{"class":350},[329,1756,379],{"class":354},[329,1758,351],{"class":350},[329,1760,384],{"class":339},[329,1762,1763,1765,1767],{"class":331,"line":619},[329,1764,390],{"class":369},[329,1766,373],{"class":339},[329,1768,1769],{"class":346}," [\n",[329,1771,1772,1775,1778],{"class":331,"line":641},[329,1773,1774],{"class":350},"    \"",[329,1776,1777],{"class":354},"https:\u002F\u002Fmaps.townshipcanada.com\u002Foil_gas_fields_label\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=YOUR_API_KEY",[329,1779,1780],{"class":350},"\"\n",[329,1782,1783,1786],{"class":331,"line":656},[329,1784,1785],{"class":346},"  ]",[329,1787,384],{"class":339},[329,1789,1790,1792,1794,1796],{"class":331,"line":676},[329,1791,413],{"class":369},[329,1793,373],{"class":339},[329,1795,419],{"class":418},[329,1797,384],{"class":339},[329,1799,1800,1802,1804],{"class":331,"line":687},[329,1801,427],{"class":369},[329,1803,373],{"class":339},[329,1805,1592],{"class":418},[329,1807,1808,1810,1812],{"class":331,"line":696},[329,1809,438],{"class":339},[329,1811,441],{"class":346},[329,1813,444],{"class":339},[329,1815,1816],{"class":331,"line":705},[329,1817,451],{"emptyLinePlaceholder":450},[329,1819,1820,1822,1824,1826,1828],{"class":331,"line":710},[329,1821,336],{"class":335},[329,1823,117],{"class":339},[329,1825,461],{"class":342},[329,1827,347],{"class":346},[329,1829,466],{"class":339},[329,1831,1832,1834,1836,1838,1840,1842],{"class":331,"line":723},[329,1833,472],{"class":369},[329,1835,373],{"class":339},[329,1837,376],{"class":350},[329,1839,1361],{"class":354},[329,1841,351],{"class":350},[329,1843,384],{"class":339},[329,1845,1846,1848,1850,1852,1854,1856],{"class":331,"line":738},[329,1847,370],{"class":369},[329,1849,373],{"class":339},[329,1851,376],{"class":350},[329,1853,747],{"class":354},[329,1855,351],{"class":350},[329,1857,384],{"class":339},[329,1859,1860,1862,1864,1866,1868,1870],{"class":331,"line":754},[329,1861,503],{"class":369},[329,1863,373],{"class":339},[329,1865,376],{"class":350},[329,1867,1361],{"class":354},[329,1869,351],{"class":350},[329,1871,384],{"class":339},[329,1873,1874,1876,1878,1880,1882,1884,1886,1888],{"class":331,"line":769},[329,1875,519],{"class":350},[329,1877,140],{"class":522},[329,1879,351],{"class":350},[329,1881,373],{"class":339},[329,1883,376],{"class":350},[329,1885,1361],{"class":354},[329,1887,351],{"class":350},[329,1889,384],{"class":339},[329,1891,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928,1931,1933,1935,1937,1939,1941],{"class":331,"line":788},[329,1893,814],{"class":369},[329,1895,373],{"class":339},[329,1897,569],{"class":339},[329,1899,376],{"class":350},[329,1901,143],{"class":522},[329,1903,351],{"class":350},[329,1905,373],{"class":339},[329,1907,376],{"class":350},[329,1909,1366],{"class":354},[329,1911,351],{"class":350},[329,1913,360],{"class":339},[329,1915,376],{"class":350},[329,1917,839],{"class":522},[329,1919,351],{"class":350},[329,1921,373],{"class":339},[329,1923,556],{"class":418},[329,1925,360],{"class":339},[329,1927,376],{"class":350},[329,1929,1930],{"class":522},"symbol-placement",[329,1932,351],{"class":350},[329,1934,373],{"class":339},[329,1936,376],{"class":350},[329,1938,1369],{"class":354},[329,1940,351],{"class":350},[329,1942,849],{"class":339},[329,1944,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993],{"class":331,"line":800},[329,1946,564],{"class":369},[329,1948,373],{"class":339},[329,1950,569],{"class":339},[329,1952,376],{"class":350},[329,1954,863],{"class":522},[329,1956,351],{"class":350},[329,1958,373],{"class":339},[329,1960,376],{"class":350},[329,1962,1697],{"class":354},[329,1964,351],{"class":350},[329,1966,360],{"class":339},[329,1968,376],{"class":350},[329,1970,881],{"class":522},[329,1972,351],{"class":350},[329,1974,373],{"class":339},[329,1976,376],{"class":350},[329,1978,890],{"class":354},[329,1980,351],{"class":350},[329,1982,360],{"class":339},[329,1984,376],{"class":350},[329,1986,899],{"class":522},[329,1988,351],{"class":350},[329,1990,373],{"class":339},[329,1992,599],{"class":418},[329,1994,602],{"class":339},[329,1996,1997,1999,2001],{"class":331,"line":811},[329,1998,438],{"class":339},[329,2000,441],{"class":346},[329,2002,444],{"class":339},[95,2004],{},[17,2006,2008],{"id":2007},"styling-guide","Styling guide",[10,2010,2011],{},"These color values are used throughout the integration examples and match the Township Canada visual style.",[102,2013,2015],{"id":2014},"grid-boundaries","Grid boundaries",[126,2017,2018,2031],{},[129,2019,2020],{},[132,2021,2022,2025,2028],{},[135,2023,2024],{},"Grid level",[135,2026,2027],{},"Color",[135,2029,2030],{},"Line width",[151,2032,2033,2046,2059,2072],{},[132,2034,2035,2038,2043],{},[156,2036,2037],{},"Township boundaries",[156,2039,2040,2042],{},[29,2041,583],{}," (forest green)",[156,2044,2045],{},"1.5",[132,2047,2048,2051,2056],{},[156,2049,2050],{},"Section boundaries",[156,2052,2053],{},[29,2054,2055],{},"#4a7c59",[156,2057,2058],{},"1.0",[132,2060,2061,2064,2069],{},[156,2062,2063],{},"Quarter section boundaries",[156,2065,2066],{},[29,2067,2068],{},"#6b9e7a",[156,2070,2071],{},"0.75",[132,2073,2074,2077,2081],{},[156,2075,2076],{},"LSD boundaries",[156,2078,2079],{},[29,2080,2068],{},[156,2082,2083],{},"0.5",[102,2085,1317],{"id":2086},"data-layers-1",[126,2088,2089,2101],{},[129,2090,2091],{},[132,2092,2093,2096,2098],{},[135,2094,2095],{},"Layer",[135,2097,2027],{},[135,2099,2100],{},"Notes",[151,2102,2103,2116,2133,2147,2161,2175],{},[132,2104,2105,2108,2113],{},[156,2106,2107],{},"Oil & gas fields",[156,2109,2110,2112],{},[29,2111,1697],{}," (amber)",[156,2114,2115],{},"Line or fill",[132,2117,2118,2121,2127],{},[156,2119,2120],{},"Municipal boundaries",[156,2122,2123,2126],{},[29,2124,2125],{},"#6366f1"," (indigo)",[156,2128,2129,2130],{},"Dashed line - ",[29,2131,2132],{},"line-dasharray: [4, 2]",[132,2134,2135,2138,2144],{},[156,2136,2137],{},"Parks and protected areas",[156,2139,2140,2143],{},[29,2141,2142],{},"#16a34a"," (green)",[156,2145,2146],{},"Fill with low opacity",[132,2148,2149,2152,2158],{},[156,2150,2151],{},"Water bodies",[156,2153,2154,2157],{},[29,2155,2156],{},"#2563eb"," (blue)",[156,2159,2160],{},"Fill",[132,2162,2163,2166,2172],{},[156,2164,2165],{},"Railways",[156,2167,2168,2171],{},[29,2169,2170],{},"#71717a"," (gray)",[156,2173,2174],{},"Line",[132,2176,2177,2180,2186],{},[156,2178,2179],{},"Roads",[156,2181,2182,2185],{},[29,2183,2184],{},"#94a3b8"," (slate)",[156,2187,2174],{},[102,2189,2191],{"id":2190},"label-text","Label text",[22,2193,2195],{"className":323,"code":2194,"language":325,"meta":31,"style":31},"paint: {\n  'text-color': '#1a1a1a',\n  'text-halo-color': '#ffffff',\n  'text-halo-width': 2\n}\n",[29,2196,2197,2207,2230,2249,2262],{"__ignoreMap":31},[329,2198,2199,2203,2205],{"class":331,"line":332},[329,2200,2202],{"class":2201},"sYn-s","paint",[329,2204,373],{"class":339},[329,2206,363],{"class":339},[329,2208,2209,2212,2214,2217,2221,2223,2226,2228],{"class":331,"line":366},[329,2210,2211],{"class":350},"  '",[329,2213,863],{"class":354},[329,2215,2216],{"class":350},"'",[329,2218,2220],{"class":2219},"sBPpx",": ",[329,2222,2216],{"class":350},[329,2224,2225],{"class":354},"#1a1a1a",[329,2227,2216],{"class":350},[329,2229,384],{"class":339},[329,2231,2232,2234,2236,2238,2240,2242,2245,2247],{"class":331,"line":387},[329,2233,2211],{"class":350},[329,2235,881],{"class":354},[329,2237,2216],{"class":350},[329,2239,2220],{"class":2219},[329,2241,2216],{"class":350},[329,2243,2244],{"class":354},"#ffffff",[329,2246,2216],{"class":350},[329,2248,384],{"class":339},[329,2250,2251,2253,2255,2257,2259],{"class":331,"line":410},[329,2252,2211],{"class":350},[329,2254,899],{"class":354},[329,2256,2216],{"class":350},[329,2258,2220],{"class":2219},[329,2260,2261],{"class":418},"2\n",[329,2263,2264],{"class":331,"line":424},[329,2265,2266],{"class":339},"}\n",[95,2268],{},[17,2270,2272],{"id":2271},"performance-tips","Performance tips",[10,2274,2275,2278],{},[54,2276,2277],{},"Set source maxzoom to 14 for grid tiles."," The tiles are generated at zoom 14 and over-zoom cleanly to higher zoom levels. Loading tiles beyond source zoom 14 wastes requests without adding detail.",[10,2280,2281,2284],{},[54,2282,2283],{},"Set source maxzoom to 12 for data layers."," Data layers contain no additional detail above zoom 12. Setting a higher source maxzoom generates unnecessary tile requests.",[22,2286,2288],{"className":323,"code":2287,"language":325,"meta":31,"style":31},"\u002F\u002F Grid tiles - cap source at 14\nmap.addSource(\"ab_twp\", {\n  type: \"vector\",\n  tiles: [\"https:\u002F\u002Fmaps.townshipcanada.com\u002Fab\u002Ftwp\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=KEY\"],\n  minzoom: 0,\n  maxzoom: 14 \u002F\u002F Not 20\n});\n\n\u002F\u002F Data layers - cap source at 12\nmap.addSource(\"oil_gas_fields\", {\n  type: \"vector\",\n  tiles: [\"https:\u002F\u002Fmaps.townshipcanada.com\u002Foil_gas_fields\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=KEY\"],\n  minzoom: 0,\n  maxzoom: 12 \u002F\u002F Not 14 or 20\n});\n",[29,2289,2290,2296,2316,2330,2349,2359,2370,2378,2382,2387,2407,2421,2440,2450,2461],{"__ignoreMap":31},[329,2291,2292],{"class":331,"line":332},[329,2293,2295],{"class":2294},"s9Tkl","\u002F\u002F Grid tiles - cap source at 14\n",[329,2297,2298,2300,2302,2304,2306,2308,2310,2312,2314],{"class":331,"line":366},[329,2299,336],{"class":335},[329,2301,117],{"class":339},[329,2303,343],{"class":342},[329,2305,347],{"class":346},[329,2307,351],{"class":350},[329,2309,355],{"class":354},[329,2311,351],{"class":350},[329,2313,360],{"class":339},[329,2315,363],{"class":339},[329,2317,2318,2320,2322,2324,2326,2328],{"class":331,"line":387},[329,2319,370],{"class":369},[329,2321,373],{"class":339},[329,2323,376],{"class":350},[329,2325,379],{"class":354},[329,2327,351],{"class":350},[329,2329,384],{"class":339},[329,2331,2332,2334,2336,2338,2340,2343,2345,2347],{"class":331,"line":410},[329,2333,390],{"class":369},[329,2335,373],{"class":339},[329,2337,395],{"class":346},[329,2339,351],{"class":350},[329,2341,2342],{"class":354},"https:\u002F\u002Fmaps.townshipcanada.com\u002Fab\u002Ftwp\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=KEY",[329,2344,351],{"class":350},[329,2346,405],{"class":346},[329,2348,384],{"class":339},[329,2350,2351,2353,2355,2357],{"class":331,"line":424},[329,2352,413],{"class":369},[329,2354,373],{"class":339},[329,2356,419],{"class":418},[329,2358,384],{"class":339},[329,2360,2361,2363,2365,2367],{"class":331,"line":435},[329,2362,427],{"class":369},[329,2364,373],{"class":339},[329,2366,846],{"class":418},[329,2368,2369],{"class":2294}," \u002F\u002F Not 20\n",[329,2371,2372,2374,2376],{"class":331,"line":447},[329,2373,438],{"class":339},[329,2375,441],{"class":346},[329,2377,444],{"class":339},[329,2379,2380],{"class":331,"line":454},[329,2381,451],{"emptyLinePlaceholder":450},[329,2383,2384],{"class":331,"line":469},[329,2385,2386],{"class":2294},"\u002F\u002F Data layers - cap source at 12\n",[329,2388,2389,2391,2393,2395,2397,2399,2401,2403,2405],{"class":331,"line":485},[329,2390,336],{"class":335},[329,2392,117],{"class":339},[329,2394,343],{"class":342},[329,2396,347],{"class":346},[329,2398,351],{"class":350},[329,2400,1356],{"class":354},[329,2402,351],{"class":350},[329,2404,360],{"class":339},[329,2406,363],{"class":339},[329,2408,2409,2411,2413,2415,2417,2419],{"class":331,"line":500},[329,2410,370],{"class":369},[329,2412,373],{"class":339},[329,2414,376],{"class":350},[329,2416,379],{"class":354},[329,2418,351],{"class":350},[329,2420,384],{"class":339},[329,2422,2423,2425,2427,2429,2431,2434,2436,2438],{"class":331,"line":516},[329,2424,390],{"class":369},[329,2426,373],{"class":339},[329,2428,395],{"class":346},[329,2430,351],{"class":350},[329,2432,2433],{"class":354},"https:\u002F\u002Fmaps.townshipcanada.com\u002Foil_gas_fields\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=KEY",[329,2435,351],{"class":350},[329,2437,405],{"class":346},[329,2439,384],{"class":339},[329,2441,2442,2444,2446,2448],{"class":331,"line":537},[329,2443,413],{"class":369},[329,2445,373],{"class":339},[329,2447,419],{"class":418},[329,2449,384],{"class":339},[329,2451,2452,2454,2456,2458],{"class":331,"line":549},[329,2453,427],{"class":369},[329,2455,373],{"class":339},[329,2457,556],{"class":418},[329,2459,2460],{"class":2294}," \u002F\u002F Not 14 or 20\n",[329,2462,2463,2465,2467],{"class":331,"line":561},[329,2464,438],{"class":339},[329,2466,441],{"class":346},[329,2468,444],{"class":339},[10,2470,2471,2474],{},[54,2472,2473],{},"Use layer minzoom\u002Fmaxzoom to control visibility."," Add all sources once, then use layer-level zoom constraints to show each grid level at the right scale. This avoids adding and removing sources dynamically as the user zooms.",[22,2476,2478],{"className":323,"code":2477,"language":325,"meta":31,"style":31},"\u002F\u002F Townships visible at zoom 6–12\nmap.addLayer({ id: 'ab_twp', ..., minzoom: 6, maxzoom: 12 });\n\n\u002F\u002F Sections visible at zoom 12–14\nmap.addLayer({ id: 'ab_sec', ..., minzoom: 12, maxzoom: 14 });\n\n\u002F\u002F LSDs visible at zoom 14+\nmap.addLayer({ id: 'ab_lsd', ..., minzoom: 14, maxzoom: 20 });\n",[29,2479,2480,2485,2538,2542,2547,2594,2598,2603],{"__ignoreMap":31},[329,2481,2482],{"class":331,"line":332},[329,2483,2484],{"class":2294},"\u002F\u002F Townships visible at zoom 6–12\n",[329,2486,2487,2489,2491,2493,2495,2498,2501,2503,2506,2508,2510,2512,2515,2518,2520,2522,2524,2527,2529,2531,2534,2536],{"class":331,"line":366},[329,2488,336],{"class":335},[329,2490,117],{"class":339},[329,2492,461],{"class":342},[329,2494,347],{"class":346},[329,2496,2497],{"class":339},"{",[329,2499,2500],{"class":369}," id",[329,2502,373],{"class":339},[329,2504,2505],{"class":350}," '",[329,2507,355],{"class":354},[329,2509,2216],{"class":350},[329,2511,360],{"class":339},[329,2513,2514],{"class":339}," ...,",[329,2516,2517],{"class":369}," minzoom",[329,2519,373],{"class":339},[329,2521,544],{"class":418},[329,2523,360],{"class":339},[329,2525,2526],{"class":369}," maxzoom",[329,2528,373],{"class":339},[329,2530,556],{"class":418},[329,2532,2533],{"class":339}," }",[329,2535,441],{"class":346},[329,2537,444],{"class":339},[329,2539,2540],{"class":331,"line":387},[329,2541,451],{"emptyLinePlaceholder":450},[329,2543,2544],{"class":331,"line":410},[329,2545,2546],{"class":2294},"\u002F\u002F Sections visible at zoom 12–14\n",[329,2548,2549,2551,2553,2555,2557,2559,2561,2563,2565,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590,2592],{"class":331,"line":424},[329,2550,336],{"class":335},[329,2552,117],{"class":339},[329,2554,461],{"class":342},[329,2556,347],{"class":346},[329,2558,2497],{"class":339},[329,2560,2500],{"class":369},[329,2562,373],{"class":339},[329,2564,2505],{"class":350},[329,2566,2567],{"class":354},"ab_sec",[329,2569,2216],{"class":350},[329,2571,360],{"class":339},[329,2573,2514],{"class":339},[329,2575,2517],{"class":369},[329,2577,373],{"class":339},[329,2579,556],{"class":418},[329,2581,360],{"class":339},[329,2583,2526],{"class":369},[329,2585,373],{"class":339},[329,2587,846],{"class":418},[329,2589,2533],{"class":339},[329,2591,441],{"class":346},[329,2593,444],{"class":339},[329,2595,2596],{"class":331,"line":435},[329,2597,451],{"emptyLinePlaceholder":450},[329,2599,2600],{"class":331,"line":447},[329,2601,2602],{"class":2294},"\u002F\u002F LSDs visible at zoom 14+\n",[329,2604,2605,2607,2609,2611,2613,2615,2617,2619,2621,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2645,2647,2649],{"class":331,"line":454},[329,2606,336],{"class":335},[329,2608,117],{"class":339},[329,2610,461],{"class":342},[329,2612,347],{"class":346},[329,2614,2497],{"class":339},[329,2616,2500],{"class":369},[329,2618,373],{"class":339},[329,2620,2505],{"class":350},[329,2622,2623],{"class":354},"ab_lsd",[329,2625,2216],{"class":350},[329,2627,360],{"class":339},[329,2629,2514],{"class":339},[329,2631,2517],{"class":369},[329,2633,373],{"class":339},[329,2635,846],{"class":418},[329,2637,360],{"class":339},[329,2639,2526],{"class":369},[329,2641,373],{"class":339},[329,2643,2644],{"class":418}," 20",[329,2646,2533],{"class":339},[329,2648,441],{"class":346},[329,2650,444],{"class":339},[10,2652,2653,2656],{},[54,2654,2655],{},"Enable tile caching in your mapping library."," Mapbox GL JS, MapLibre GL JS, and OpenLayers all cache vector tiles in memory by default. Avoid clearing the map and re-initializing sources on every state change - update layer visibility instead.",[10,2658,2659,2662,2663,2665,2666,2668],{},[54,2660,2661],{},"Load only the provinces you need."," If your application covers only Alberta and Saskatchewan, add tile sources only for ",[29,2664,37],{}," and ",[29,2667,41],{},". Each province has its own tile URL, so you only fetch and render the data you need.",[95,2670],{},[17,2672,2674],{"id":2673},"quick-reference","Quick reference",[126,2676,2677,2687],{},[129,2678,2679],{},[132,2680,2681,2684],{},[135,2682,2683],{},"URL segment",[135,2685,2686],{},"Values",[151,2688,2689,2708,2731,2754,2765,2784,2792,2800],{},[132,2690,2691,2696],{},[156,2692,2693],{},[29,2694,2695],{},"{province}",[156,2697,2698,38,2700,38,2702,38,2704,38,2706],{},[29,2699,37],{},[29,2701,41],{},[29,2703,44],{},[29,2705,47],{},[29,2707,50],{},[132,2709,2710,2713],{},[156,2711,2712],{},"DLS grid layers",[156,2714,2715,38,2717,38,2719,38,2721,38,2723,38,2725,38,2727,38,2729],{},[29,2716,160],{},[29,2718,181],{},[29,2720,203],{},[29,2722,223],{},[29,2724,244],{},[29,2726,262],{},[29,2728,282],{},[29,2730,301],{},[132,2732,2733,2736],{},[156,2734,2735],{},"NTS grid layers",[156,2737,2738,38,2740,38,2742,38,2744,38,2746,38,2748,38,2750,38,2752],{},[29,2739,1021],{},[29,2741,1040],{},[29,2743,1061],{},[29,2745,1080],{},[29,2747,1100],{},[29,2749,1119],{},[29,2751,1139],{},[29,2753,1157],{},[132,2755,2756,2759],{},[156,2757,2758],{},"MB river lots",[156,2760,2761,38,2763],{},[29,2762,953],{},[29,2764,972],{},[132,2766,2767,2770],{},[156,2768,2769],{},"Ontario layers",[156,2771,2772,38,2774,38,2776,38,2778,38,2780,38,2782],{},[29,2773,160],{},[29,2775,181],{},[29,2777,1242],{},[29,2779,1260],{},[29,2781,1280],{},[29,2783,1298],{},[132,2785,2786,2789],{},[156,2787,2788],{},"Tile format",[156,2790,2791],{},"MVT (Mapbox Vector Tiles)",[132,2793,2794,2797],{},[156,2795,2796],{},"Grid source maxzoom",[156,2798,2799],{},"14",[132,2801,2802,2805],{},[156,2803,2804],{},"Data source maxzoom",[156,2806,2807],{},"12",[95,2809],{},[17,2811,2813],{"id":2812},"related-guides","Related guides",[2815,2816,2817,2826,2833,2840,2847],"ul",{},[2818,2819,2820,2825],"li",{},[2821,2822,2824],"a",{"href":2823},"\u002Fguides\u002Fapi-integration","API Integration Guide"," - API endpoints, pricing, and key management",[2818,2827,2828,2832],{},[2821,2829,2831],{"href":2830},"\u002Fguides\u002Fmapbox-integration","Mapbox GL JS Integration"," - Full working example with DLS grids, search, and data layers",[2818,2834,2835,2839],{},[2821,2836,2838],{"href":2837},"\u002Fguides\u002Fmaplibre-integration","MapLibre GL JS Integration"," - Open-source alternative to Mapbox GL JS",[2818,2841,2842,2846],{},[2821,2843,2845],{"href":2844},"\u002Fguides\u002Fopenlayers-integration","OpenLayers Integration"," - Vector tile rendering with OpenLayers",[2818,2848,2849,2853],{},[2821,2850,2852],{"href":2851},"\u002Fguides\u002Fleaflet-integration","Leaflet Integration"," - Adding survey grids to Leaflet maps",[2855,2856,2857],"style",{},"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 .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 .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sQtxO, html code.shiki .sQtxO{--shiki-light:#E53935;--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 .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}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}",{"title":31,"searchDepth":366,"depth":366,"links":2859},[2860,2861,2867,2868,2873,2874,2875],{"id":19,"depth":366,"text":20},{"id":99,"depth":366,"text":100,"children":2862},[2863,2864,2865,2866],{"id":104,"depth":387,"text":105},{"id":922,"depth":387,"text":923},{"id":990,"depth":387,"text":991},{"id":1175,"depth":387,"text":1176},{"id":1316,"depth":366,"text":1317},{"id":2007,"depth":366,"text":2008,"children":2869},[2870,2871,2872],{"id":2014,"depth":387,"text":2015},{"id":2086,"depth":387,"text":1317},{"id":2190,"depth":387,"text":2191},{"id":2271,"depth":366,"text":2272},{"id":2673,"depth":366,"text":2674},{"id":2812,"depth":366,"text":2813},"api","Complete reference for Township Canada vector tile layers. Available grid layers by province, data layers, tile URL patterns, styling guide, and recommended zoom ranges.",false,"md","i-lucide-layers",{},"\u002Fguides\u002Fmaps-api-vector-tiles",{"title":5,"description":2877},"guides\u002Fmaps-api-vector-tiles","HO3wcpOFVSdvu_HD1nOX6ht5lH47Yo-JzhG-4V8Sss4",[2887,3369,4273],{"id":2888,"title":2889,"body":2890,"category":2876,"description":3363,"draft":2878,"extension":2879,"icon":3364,"meta":3365,"navigation":450,"order":332,"path":2823,"seo":3366,"stem":3367,"__hash__":3368},"guides\u002Fguides\u002Fapi-integration.md","Legal Land Description API Integration Guide",{"type":7,"value":2891,"toc":3328},[2892,2895,2902,2906,2934,2941,2945,2948,2952,2955,2961,2965,2968,2973,2977,2980,2985,2989,2992,2997,3001,3004,3009,3071,3077,3127,3130,3134,3138,3141,3145,3148,3152,3155,3159,3162,3166,3169,3173,3214,3218,3224,3244,3248,3251,3255,3258,3262,3265,3269,3272,3276,3286,3288,3320],[10,2893,2894],{},"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.",[10,2896,2897],{},[2898,2899],"img",{"alt":2900,"src":2901},"Developer Portal","\u002Fimages\u002Fguides\u002Fapi-portal.webp",[17,2903,2905],{"id":2904},"quick-start","Quick start",[2907,2908,2909,2913,2920,2924,2927,2931],"steps",{},[102,2910,2912],{"id":2911},"get-an-api-key","Get an API key",[10,2914,2915,2916,2919],{},"Log into your Township Canada account and go to ",[54,2917,2918],{},"API"," in the main navigation. Subscribe to an API endpoint and create your first API key.",[102,2921,2923],{"id":2922},"make-your-first-request","Make your first request",[10,2925,2926],{},"Add your API key to the request header and make a test request.",[102,2928,2930],{"id":2929},"parse-the-response","Parse the response",[10,2932,2933],{},"All APIs return JSON with coordinates, legal descriptions, and metadata.",[10,2935,2936,2937,117],{},"For full documentation and code examples, visit the ",[2821,2938,2940],{"href":2939},"\u002Fapi","API documentation",[17,2942,2944],{"id":2943},"api-endpoints","API endpoints",[10,2946,2947],{},"Township Canada offers four distinct API endpoints:",[102,2949,2951],{"id":2950},"search-api-20month","Search API ($20\u002Fmonth)",[10,2953,2954],{},"Convert legal land descriptions to geographic coordinates and vice versa. Supports DLS, NTS, Geographic Townships, and FPS formats.",[10,2956,2957,2960],{},[54,2958,2959],{},"Use cases",": Property lookup, coordinate conversion, reverse geocoding",[102,2962,2964],{"id":2963},"autocomplete-api-20month","Autocomplete API ($20\u002Fmonth)",[10,2966,2967],{},"Search legal land descriptions with partial text. Returns up to 10 matching results with coordinates-ideal for search boxes and type-ahead interfaces.",[10,2969,2970,2972],{},[54,2971,2959],{},": Search boxes, type-ahead, field validation",[102,2974,2976],{"id":2975},"batch-api-40month","Batch API ($40\u002Fmonth)",[10,2978,2979],{},"Process up to 100 records per request. Convert lists of legal land descriptions to coordinates or coordinates to legal land descriptions.",[10,2981,2982,2984],{},[54,2983,2959],{},": Bulk data processing, migration, spatial analysis",[102,2986,2988],{"id":2987},"maps-api-20month","Maps API ($20\u002Fmonth)",[10,2990,2991],{},"Display legal survey grids on maps in your web or mobile applications. Vector tiles format compatible with Mapbox GL, Leaflet, and other mapping libraries.",[10,2993,2994,2996],{},[54,2995,2959],{},": Custom mapping applications, data visualization",[17,2998,3000],{"id":2999},"api-pricing-tiers","API pricing tiers",[10,3002,3003],{},"Each API offers three pricing tiers:",[10,3005,3006],{},[54,3007,3008],{},"Search, Autocomplete & Batch APIs",[126,3010,3011,3027],{},[129,3012,3013],{},[132,3014,3015,3018,3021,3024],{},[135,3016,3017],{},"Tier",[135,3019,3020],{},"Monthly Requests",[135,3022,3023],{},"Rate Limit",[135,3025,3026],{},"Price",[151,3028,3029,3043,3057],{},[132,3030,3031,3034,3037,3040],{},[156,3032,3033],{},"Build",[156,3035,3036],{},"1,000",[156,3038,3039],{},"1\u002Fsec",[156,3041,3042],{},"$20-40\u002Fmo",[132,3044,3045,3048,3051,3054],{},[156,3046,3047],{},"Scale",[156,3049,3050],{},"10,000",[156,3052,3053],{},"5\u002Fsec",[156,3055,3056],{},"$100-200\u002Fmo",[132,3058,3059,3062,3065,3068],{},[156,3060,3061],{},"Enterprise",[156,3063,3064],{},"100,000",[156,3066,3067],{},"25\u002Fsec",[156,3069,3070],{},"$500-1,000\u002Fmo",[10,3072,3073,3076],{},[54,3074,3075],{},"Maps API"," (higher request quotas for tile rendering)",[126,3078,3079,3091],{},[129,3080,3081],{},[132,3082,3083,3085,3087,3089],{},[135,3084,3017],{},[135,3086,3020],{},[135,3088,3023],{},[135,3090,3026],{},[151,3092,3093,3104,3115],{},[132,3094,3095,3097,3099,3101],{},[156,3096,3033],{},[156,3098,3050],{},[156,3100,3039],{},[156,3102,3103],{},"$20\u002Fmo",[132,3105,3106,3108,3110,3112],{},[156,3107,3047],{},[156,3109,3064],{},[156,3111,3053],{},[156,3113,3114],{},"$100\u002Fmo",[132,3116,3117,3119,3122,3124],{},[156,3118,3061],{},[156,3120,3121],{},"1,000,000",[156,3123,3067],{},[156,3125,3126],{},"$500\u002Fmo",[10,3128,3129],{},"Annual billing saves two months compared to monthly billing.",[17,3131,3133],{"id":3132},"common-integration-patterns","Common integration patterns",[102,3135,3137],{"id":3136},"real-estate-applications","Real Estate Applications",[10,3139,3140],{},"Add legal land description lookup to property search interfaces. Use the Autocomplete API for type-ahead search and the Search API for coordinate conversion.",[102,3142,3144],{"id":3143},"oil-gas-software","Oil & Gas Software",[10,3146,3147],{},"Integrate batch conversion for well location management. Use the Maps API to display DLS\u002FNTS grids in custom mapping applications.",[102,3149,3151],{"id":3150},"mobile-field-apps","Mobile Field Apps",[10,3153,3154],{},"Add LLD search and coordinate conversion for field workers. The APIs work with any mobile development framework (React Native, Flutter, native iOS\u002FAndroid).",[102,3156,3158],{"id":3157},"gis-platforms","GIS Platforms",[10,3160,3161],{},"Enhance ArcGIS, QGIS, or custom GIS tools with legal land description support. Batch API enables bulk coordinate conversion for spatial analysis.",[102,3163,3165],{"id":3164},"agriculture-technology","Agriculture Technology",[10,3167,3168],{},"Add quarter section and LSD lookup to farm management software. Combine with soil and boundary data for precision agriculture applications.",[17,3170,3172],{"id":3171},"getting-an-api-key","Getting an API key",[2907,3174,3175,3179,3185,3189,3192,3196,3203,3207],{},[102,3176,3178],{"id":3177},"open-the-developer-portal","Open the Developer Portal",[10,3180,3181,3182,3184],{},"Go to ",[54,3183,2918],{}," in the main navigation to access the Developer Portal.",[102,3186,3188],{"id":3187},"subscribe-to-an-api","Subscribe to an API",[10,3190,3191],{},"Click on the API you want to use (Search, Autocomplete, Batch, or Maps). Select a tier and complete payment.",[102,3193,3195],{"id":3194},"create-an-api-key","Create an API key",[10,3197,3198,3199,3202],{},"Click ",[54,3200,3201],{},"+ Add Key"," and give your key a descriptive name. Copy the key immediately-it won't be shown again.",[102,3204,3206],{"id":3205},"use-your-key","Use your key",[10,3208,3209,3210,3213],{},"Include the API key in the ",[29,3211,3212],{},"x-api-key"," header for all requests.",[17,3215,3217],{"id":3216},"managing-api-subscriptions","Managing API subscriptions",[10,3219,3220,3221,3223],{},"Manage your API subscriptions from the ",[54,3222,2918],{}," page in the main navigation. The Developer Portal provides:",[2815,3225,3226,3232,3238],{},[2818,3227,3228,3231],{},[54,3229,3230],{},"Overview",": View all your API keys and subscriptions",[2818,3233,3234,3237],{},[54,3235,3236],{},"Logs",": Monitor API requests with timestamps and response codes",[2818,3239,3240,3243],{},[54,3241,3242],{},"Alerts",": Configure usage threshold notifications",[102,3245,3247],{"id":3246},"usage-monitoring","Usage monitoring",[10,3249,3250],{},"Track your API usage in real-time from the Overview tab. Usage resets at the start of each billing period.",[102,3252,3254],{"id":3253},"rate-limiting","Rate limiting",[10,3256,3257],{},"Exceeding your rate limit results in HTTP 429 Too Many Requests responses. Implement exponential backoff in your integration to handle rate limits gracefully.",[102,3259,3261],{"id":3260},"quota-management","Quota management",[10,3263,3264],{},"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.",[17,3266,3268],{"id":3267},"code-examples","Code examples",[10,3270,3271],{},"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.",[17,3273,3275],{"id":3274},"checking-system-health","Checking system health",[10,3277,3278,3279,3285],{},"For the current status of Township Canada's APIs, including uptime, response time, and incident history, visit ",[2821,3280,3284],{"href":3281,"rel":3282},"https:\u002F\u002Fstatus.townshipcanada.com",[3283],"nofollow","status.townshipcanada.com",". This site provides real-time updates on API system health.",[17,3287,2813],{"id":2812},[2815,3289,3290,3297,3304,3311],{},[2818,3291,3292,3296],{},[2821,3293,3295],{"href":3294},"\u002Fguides\u002Faccount-management","Account Management"," - Manage billing for API subscriptions",[2818,3298,3299,3303],{},[2821,3300,3302],{"href":3301},"\u002Fguides\u002Fbatch-conversion","Batch Conversion"," - Web interface for batch processing",[2818,3305,3306,3310],{},[2821,3307,3309],{"href":3308},"\u002Fguides\u002Fmap","Interactive Maps"," - Map features available through the Maps API",[2818,3312,3313,3319],{},[2821,3314,3316],{"href":3315},"\u002Fblog\u002Ftownshipcanada-sdk-typescript-npm-package",[29,3317,3318],{},"townshipcanada"," - Official TypeScript SDK for Node.js developers",[10,3321,3322,3323,3327],{},"Need help with your integration? ",[2821,3324,3326],{"href":3325},"\u002Fcontact-us","Contact us"," for technical support and custom API solutions.",{"title":31,"searchDepth":366,"depth":366,"links":3329},[3330,3335,3341,3342,3349,3355,3360,3361,3362],{"id":2904,"depth":366,"text":2905,"children":3331},[3332,3333,3334],{"id":2911,"depth":387,"text":2912},{"id":2922,"depth":387,"text":2923},{"id":2929,"depth":387,"text":2930},{"id":2943,"depth":366,"text":2944,"children":3336},[3337,3338,3339,3340],{"id":2950,"depth":387,"text":2951},{"id":2963,"depth":387,"text":2964},{"id":2975,"depth":387,"text":2976},{"id":2987,"depth":387,"text":2988},{"id":2999,"depth":366,"text":3000},{"id":3132,"depth":366,"text":3133,"children":3343},[3344,3345,3346,3347,3348],{"id":3136,"depth":387,"text":3137},{"id":3143,"depth":387,"text":3144},{"id":3150,"depth":387,"text":3151},{"id":3157,"depth":387,"text":3158},{"id":3164,"depth":387,"text":3165},{"id":3171,"depth":366,"text":3172,"children":3350},[3351,3352,3353,3354],{"id":3177,"depth":387,"text":3178},{"id":3187,"depth":387,"text":3188},{"id":3194,"depth":387,"text":3195},{"id":3205,"depth":387,"text":3206},{"id":3216,"depth":366,"text":3217,"children":3356},[3357,3358,3359],{"id":3246,"depth":387,"text":3247},{"id":3253,"depth":387,"text":3254},{"id":3260,"depth":387,"text":3261},{"id":3267,"depth":366,"text":3268},{"id":3274,"depth":366,"text":3275},{"id":2812,"depth":366,"text":2813},"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":2889,"description":3363},"guides\u002Fapi-integration","0skTidP_JHbRyEgb2lLso64Jt5ActydUoBJbxBER46M",{"id":3370,"title":3371,"body":3372,"category":2876,"description":4266,"draft":2878,"extension":2879,"icon":4267,"meta":4268,"navigation":450,"order":500,"path":4269,"seo":4270,"stem":4271,"__hash__":4272},"guides\u002Fguides\u002Fapi-key-management.md","Managing API Keys for Development, Staging, and Production",{"type":7,"value":3373,"toc":4250},[3374,3377,3380,3384,3391,3414,3417,3423,3427,3430,3436,3439,3503,3506,3510,3513,3517,3524,3542,3545,3673,3676,3719,3723,3728,3740,3746,3912,3916,3925,3950,3957,3976,3980,3983,4009,4012,4016,4019,4023,4026,4050,4053,4149,4152,4156,4159,4162,4165,4169,4172,4187,4193,4199,4205,4211,4213,4247],[10,3375,3376],{},"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.",[10,3378,3379],{},"Township Canada lets you create unlimited API keys on paid plans. The recommended approach is one key per environment, per project.",[17,3381,3383],{"id":3382},"creating-api-keys","Creating API keys",[10,3385,3386,3387,3390],{},"API keys are managed from the ",[2821,3388,2900],{"href":3389},"\u002Fapp\u002Fapi",". To create a new key:",[3392,3393,3394,3399,3403,3406,3411],"ol",{},[2818,3395,3181,3396,3398],{},[54,3397,2918],{}," in the main navigation",[2818,3400,3198,3401],{},[54,3402,3201],{},[2818,3404,3405],{},"Enter a descriptive name (see naming conventions below)",[2818,3407,3198,3408],{},[54,3409,3410],{},"Create",[2818,3412,3413],{},"Copy the key immediately - it will not be shown again",[10,3415,3416],{},"Each key displays its name, creation date, and last-used timestamp. Keys can be revoked individually without affecting any other key on your account.",[3418,3419,3420],"warning",{},[10,3421,3422],{},"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.",[17,3424,3426],{"id":3425},"naming-conventions","Naming conventions",[10,3428,3429],{},"A consistent naming pattern makes it easy to identify keys at a glance, especially once you have several. Use the format:",[22,3431,3434],{"className":3432,"code":3433,"language":27},[25],"{Environment} - {Project} {Version}\n",[29,3435,3433],{"__ignoreMap":31},[10,3437,3438],{},"Examples:",[126,3440,3441,3451],{},[129,3442,3443],{},[132,3444,3445,3448],{},[135,3446,3447],{},"Key name",[135,3449,3450],{},"What it's for",[151,3452,3453,3463,3473,3483,3493],{},[132,3454,3455,3460],{},[156,3456,3457],{},[29,3458,3459],{},"Production - Well Mapper v2",[156,3461,3462],{},"Live production traffic for version 2 of your app",[132,3464,3465,3470],{},[156,3466,3467],{},[29,3468,3469],{},"Staging - Well Mapper v2",[156,3471,3472],{},"Pre-release testing against real data",[132,3474,3475,3480],{},[156,3476,3477],{},[29,3478,3479],{},"Dev - Local Testing",[156,3481,3482],{},"Your local development environment",[132,3484,3485,3490],{},[156,3486,3487],{},[29,3488,3489],{},"CI - Well Mapper",[156,3491,3492],{},"Automated tests in your CI pipeline",[132,3494,3495,3500],{},[156,3496,3497],{},[29,3498,3499],{},"Dev - Jane Smith",[156,3501,3502],{},"A team member's personal development key",[10,3504,3505],{},"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.",[17,3507,3509],{"id":3508},"environment-variable-setup","Environment variable setup",[10,3511,3512],{},"Never hardcode an API key in your source code. Use environment variables so keys stay out of version control.",[102,3514,3516],{"id":3515},"nodejs","Node.js",[10,3518,3519,3520,3523],{},"Create a ",[29,3521,3522],{},".env"," file in your project root:",[22,3525,3529],{"className":3526,"code":3527,"language":3528,"meta":31,"style":31},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","TOWNSHIP_CANADA_API_KEY=tc_live_your_key_here\n","bash",[29,3530,3531],{"__ignoreMap":31},[329,3532,3533,3536,3539],{"class":331,"line":332},[329,3534,3535],{"class":335},"TOWNSHIP_CANADA_API_KEY",[329,3537,3538],{"class":339},"=",[329,3540,3541],{"class":354},"tc_live_your_key_here\n",[10,3543,3544],{},"Load and use it in your application:",[22,3546,3548],{"className":323,"code":3547,"language":325,"meta":31,"style":31},"\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",[29,3549,3550,3555,3581,3585,3607,3618,3623,3632,3657,3662,3667],{"__ignoreMap":31},[329,3551,3552],{"class":331,"line":332},[329,3553,3554],{"class":2294},"\u002F\u002F Make sure dotenv is loaded early (e.g., in your entry file)\n",[329,3556,3557,3560,3562,3564,3567,3569,3571,3573,3576,3579],{"class":331,"line":366},[329,3558,3559],{"class":342},"require",[329,3561,347],{"class":346},[329,3563,351],{"class":350},[329,3565,3566],{"class":354},"dotenv",[329,3568,351],{"class":350},[329,3570,441],{"class":346},[329,3572,117],{"class":339},[329,3574,3575],{"class":342},"config",[329,3577,3578],{"class":346},"()",[329,3580,444],{"class":339},[329,3582,3583],{"class":331,"line":387},[329,3584,451],{"emptyLinePlaceholder":450},[329,3586,3587,3591,3594,3597,3601,3604],{"class":331,"line":410},[329,3588,3590],{"class":3589},"s5Kfy","const",[329,3592,3593],{"class":335}," response",[329,3595,3596],{"class":339}," =",[329,3598,3600],{"class":3599},"siDh9"," await",[329,3602,3603],{"class":342}," fetch",[329,3605,3606],{"class":346},"(\n",[329,3608,3609,3611,3614,3616],{"class":331,"line":424},[329,3610,519],{"class":350},[329,3612,3613],{"class":354},"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?location=NW-36-42-3-W5",[329,3615,351],{"class":350},[329,3617,384],{"class":339},[329,3619,3620],{"class":331,"line":435},[329,3621,3622],{"class":339},"  {\n",[329,3624,3625,3628,3630],{"class":331,"line":447},[329,3626,3627],{"class":369},"    headers",[329,3629,373],{"class":339},[329,3631,363],{"class":339},[329,3633,3634,3637,3640,3642,3644,3647,3649,3652,3654],{"class":331,"line":454},[329,3635,3636],{"class":350},"      \"",[329,3638,3639],{"class":522},"X-API-Key",[329,3641,351],{"class":350},[329,3643,373],{"class":339},[329,3645,3646],{"class":335}," process",[329,3648,117],{"class":339},[329,3650,3651],{"class":335},"env",[329,3653,117],{"class":339},[329,3655,3656],{"class":335},"TOWNSHIP_CANADA_API_KEY\n",[329,3658,3659],{"class":331,"line":469},[329,3660,3661],{"class":339},"    }\n",[329,3663,3664],{"class":331,"line":485},[329,3665,3666],{"class":339},"  }\n",[329,3668,3669,3671],{"class":331,"line":500},[329,3670,441],{"class":346},[329,3672,444],{"class":339},[10,3674,3675],{},"For the Maps API tiles, pass the key as a query parameter instead:",[22,3677,3679],{"className":323,"code":3678,"language":325,"meta":31,"style":31},"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",[29,3680,3681],{"__ignoreMap":31},[329,3682,3683,3685,3688,3690,3693,3696,3700,3704,3706,3708,3710,3712,3714,3717],{"class":331,"line":332},[329,3684,3590],{"class":3589},[329,3686,3687],{"class":335}," tileUrl",[329,3689,3596],{"class":339},[329,3691,3692],{"class":350}," `",[329,3694,3695],{"class":354},"https:\u002F\u002Fmaps.townshipcanada.com\u002Fgrid\u002Fdls\u002Ftwp\u002F{z}\u002F{x}\u002F{y}.mvt?api_key=",[329,3697,3699],{"class":3698},"s8XtY","${",[329,3701,3703],{"class":3702},"su_V2","process",[329,3705,117],{"class":339},[329,3707,3651],{"class":3702},[329,3709,117],{"class":339},[329,3711,3535],{"class":3702},[329,3713,438],{"class":3698},[329,3715,3716],{"class":350},"`",[329,3718,444],{"class":339},[102,3720,3722],{"id":3721},"python","Python",[10,3724,3519,3725,3727],{},[29,3726,3522],{}," file:",[22,3729,3730],{"className":3526,"code":3527,"language":3528,"meta":31,"style":31},[29,3731,3732],{"__ignoreMap":31},[329,3733,3734,3736,3738],{"class":331,"line":332},[329,3735,3535],{"class":335},[329,3737,3538],{"class":339},[329,3739,3541],{"class":354},[10,3741,3742,3743,373],{},"Load it using ",[29,3744,3745],{},"python-dotenv",[22,3747,3750],{"className":3748,"code":3749,"language":3721,"meta":31,"style":31},"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",[29,3751,3752,3761,3774,3781,3785,3794,3798,3829,3833,3849,3861,3883,3908],{"__ignoreMap":31},[329,3753,3754,3757],{"class":331,"line":332},[329,3755,3756],{"class":3599},"import",[329,3758,3760],{"class":3759},"sftqT"," os\n",[329,3762,3763,3766,3769,3771],{"class":331,"line":366},[329,3764,3765],{"class":3599},"from",[329,3767,3768],{"class":3759}," dotenv ",[329,3770,3756],{"class":3599},[329,3772,3773],{"class":3759}," load_dotenv\n",[329,3775,3776,3778],{"class":331,"line":387},[329,3777,3756],{"class":3599},[329,3779,3780],{"class":3759}," requests\n",[329,3782,3783],{"class":331,"line":410},[329,3784,451],{"emptyLinePlaceholder":450},[329,3786,3787,3791],{"class":331,"line":424},[329,3788,3790],{"class":3789},"siWMO","load_dotenv",[329,3792,3793],{"class":339},"()\n",[329,3795,3796],{"class":331,"line":435},[329,3797,451],{"emptyLinePlaceholder":450},[329,3799,3800,3803,3805,3808,3810,3813,3815,3818,3820,3822,3824,3826],{"class":331,"line":447},[329,3801,3802],{"class":3759},"api_key ",[329,3804,3538],{"class":339},[329,3806,3807],{"class":3759}," os",[329,3809,117],{"class":339},[329,3811,3812],{"class":2219},"environ",[329,3814,117],{"class":339},[329,3816,3817],{"class":3789},"get",[329,3819,347],{"class":339},[329,3821,2216],{"class":350},[329,3823,3535],{"class":354},[329,3825,2216],{"class":350},[329,3827,3828],{"class":339},")\n",[329,3830,3831],{"class":331,"line":454},[329,3832,451],{"emptyLinePlaceholder":450},[329,3834,3835,3838,3840,3843,3845,3847],{"class":331,"line":469},[329,3836,3837],{"class":3759},"response ",[329,3839,3538],{"class":339},[329,3841,3842],{"class":3759}," requests",[329,3844,117],{"class":339},[329,3846,3817],{"class":3789},[329,3848,3606],{"class":339},[329,3850,3851,3854,3857,3859],{"class":331,"line":485},[329,3852,3853],{"class":350},"    '",[329,3855,3856],{"class":354},"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location",[329,3858,2216],{"class":350},[329,3860,384],{"class":339},[329,3862,3863,3866,3869,3871,3873,3875,3877,3880],{"class":331,"line":500},[329,3864,3627],{"class":3865},"sqOPj",[329,3867,3868],{"class":339},"={",[329,3870,2216],{"class":350},[329,3872,3639],{"class":354},[329,3874,2216],{"class":350},[329,3876,373],{"class":339},[329,3878,3879],{"class":3789}," api_key",[329,3881,3882],{"class":339},"},\n",[329,3884,3885,3888,3890,3892,3895,3897,3899,3901,3904,3906],{"class":331,"line":516},[329,3886,3887],{"class":3865},"    params",[329,3889,3868],{"class":339},[329,3891,2216],{"class":350},[329,3893,3894],{"class":354},"location",[329,3896,2216],{"class":350},[329,3898,373],{"class":339},[329,3900,2505],{"class":350},[329,3902,3903],{"class":354},"10-15-23-4-W4",[329,3905,2216],{"class":350},[329,3907,2266],{"class":339},[329,3909,3910],{"class":331,"line":537},[329,3911,3828],{"class":339},[102,3913,3915],{"id":3914},"keeping-keys-out-of-git","Keeping keys out of git",[10,3917,3918,3919,3921,3922,3727],{},"Add ",[29,3920,3522],{}," to your ",[29,3923,3924],{},".gitignore",[22,3926,3928],{"className":3526,"code":3927,"language":3528,"meta":31,"style":31},"# .gitignore\n.env\n.env.local\n.env.*.local\n",[29,3929,3930,3935,3940,3945],{"__ignoreMap":31},[329,3931,3932],{"class":331,"line":332},[329,3933,3934],{"class":2294},"# .gitignore\n",[329,3936,3937],{"class":331,"line":366},[329,3938,3939],{"class":2201},".env\n",[329,3941,3942],{"class":331,"line":387},[329,3943,3944],{"class":2201},".env.local\n",[329,3946,3947],{"class":331,"line":410},[329,3948,3949],{"class":2201},".env.*.local\n",[10,3951,3952,3953,3956],{},"Commit a ",[29,3954,3955],{},".env.example"," file with placeholder values instead. Other developers on your team know what variables to set without seeing real credentials:",[22,3958,3960],{"className":3526,"code":3959,"language":3528,"meta":31,"style":31},"# .env.example\nTOWNSHIP_CANADA_API_KEY=your_api_key_here\n",[29,3961,3962,3967],{"__ignoreMap":31},[329,3963,3964],{"class":331,"line":332},[329,3965,3966],{"class":2294},"# .env.example\n",[329,3968,3969,3971,3973],{"class":331,"line":366},[329,3970,3535],{"class":335},[329,3972,3538],{"class":339},[329,3974,3975],{"class":354},"your_api_key_here\n",[17,3977,3979],{"id":3978},"key-rotation-without-downtime","Key rotation without downtime",[10,3981,3982],{},"Rotating a production key requires a brief overlap period where both the old and new key are valid. Follow this sequence:",[3392,3984,3985,3991,3997,4003],{},[2818,3986,3987,3990],{},[54,3988,3989],{},"Create the new key"," in the Developer Portal with the same name (add \"v2\" or today's date to distinguish it)",[2818,3992,3993,3996],{},[54,3994,3995],{},"Update your deployment"," - set the new key value in your environment variables or secrets manager",[2818,3998,3999,4002],{},[54,4000,4001],{},"Deploy and verify"," - confirm requests are succeeding with the new key in your application logs",[2818,4004,4005,4008],{},[54,4006,4007],{},"Revoke the old key"," - only after confirming the new key is working",[10,4010,4011],{},"Never revoke the old key before confirming the new one works. A failed deploy with no fallback means downtime.",[17,4013,4015],{"id":4014},"cicd-secrets","CI\u002FCD secrets",[10,4017,4018],{},"Automated pipelines need API keys without human involvement. Store keys in your CI provider's secrets store, not in configuration files.",[102,4020,4022],{"id":4021},"github-actions","GitHub Actions",[10,4024,4025],{},"Add your API key as a repository secret:",[3392,4027,4028,4034,4039,4045],{},[2818,4029,3181,4030,4033],{},[54,4031,4032],{},"Settings → Secrets and variables → Actions"," in your GitHub repository",[2818,4035,3198,4036],{},[54,4037,4038],{},"New repository secret",[2818,4040,4041,4042,4044],{},"Name it ",[29,4043,3535],{}," and paste your CI key value",[2818,4046,3198,4047],{},[54,4048,4049],{},"Add secret",[10,4051,4052],{},"Reference it in your workflow file:",[22,4054,4058],{"className":4055,"code":4056,"language":4057,"meta":31,"style":31},"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",[29,4059,4060,4065,4073,4080,4090,4097,4110,4122,4129,4139],{"__ignoreMap":31},[329,4061,4062],{"class":331,"line":332},[329,4063,4064],{"class":2294},"# .github\u002Fworkflows\u002Ftest.yml\n",[329,4066,4067,4070],{"class":331,"line":366},[329,4068,4069],{"class":369},"jobs",[329,4071,4072],{"class":339},":\n",[329,4074,4075,4078],{"class":331,"line":387},[329,4076,4077],{"class":369},"  test",[329,4079,4072],{"class":339},[329,4081,4082,4085,4087],{"class":331,"line":410},[329,4083,4084],{"class":369},"    runs-on",[329,4086,373],{"class":339},[329,4088,4089],{"class":354}," ubuntu-latest\n",[329,4091,4092,4095],{"class":331,"line":424},[329,4093,4094],{"class":369},"    steps",[329,4096,4072],{"class":339},[329,4098,4099,4102,4105,4107],{"class":331,"line":435},[329,4100,4101],{"class":339},"      -",[329,4103,4104],{"class":369}," uses",[329,4106,373],{"class":339},[329,4108,4109],{"class":354}," actions\u002Fcheckout@v4\n",[329,4111,4112,4114,4117,4119],{"class":331,"line":447},[329,4113,4101],{"class":339},[329,4115,4116],{"class":369}," name",[329,4118,373],{"class":339},[329,4120,4121],{"class":354}," Run integration tests\n",[329,4123,4124,4127],{"class":331,"line":454},[329,4125,4126],{"class":369},"        env",[329,4128,4072],{"class":339},[329,4130,4131,4134,4136],{"class":331,"line":469},[329,4132,4133],{"class":369},"          TOWNSHIP_CANADA_API_KEY",[329,4135,373],{"class":339},[329,4137,4138],{"class":354}," ${{ secrets.TOWNSHIP_CANADA_API_KEY }}\n",[329,4140,4141,4144,4146],{"class":331,"line":485},[329,4142,4143],{"class":369},"        run",[329,4145,373],{"class":339},[329,4147,4148],{"class":354}," npm test\n",[10,4150,4151],{},"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.",[17,4153,4155],{"id":4154},"team-key-management","Team key management",[10,4157,4158],{},"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.",[10,4160,4161],{},"Individual developers see only their own keys. Admins see keys across the entire team.",[10,4163,4164],{},"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.",[17,4166,4168],{"id":4167},"security-practices","Security practices",[10,4170,4171],{},"A few habits that prevent the most common problems:",[10,4173,4174,4177,4178,4180,4181,4186],{},[54,4175,4176],{},"Don't commit keys."," The ",[29,4179,3924],{}," pattern above covers most cases. For extra protection, consider a tool like ",[2821,4182,4185],{"href":4183,"rel":4184},"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fgit-secrets",[3283],"git-secrets"," that scans commits for credential patterns before they're pushed.",[10,4188,4189,4192],{},[54,4190,4191],{},"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.",[10,4194,4195,4198],{},[54,4196,4197],{},"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.",[10,4200,4201,4204],{},[54,4202,4203],{},"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.",[10,4206,4207,4210],{},[54,4208,4209],{},"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.",[17,4212,2813],{"id":2812},[2815,4214,4215,4221,4228,4235,4240],{},[2818,4216,4217,4220],{},[2821,4218,4219],{"href":2823},"API Integration"," - Get started with the Township Canada API",[2818,4222,4223,4227],{},[2821,4224,4226],{"href":4225},"\u002Fguides\u002Fbatch-api-guide","Batch API Guide"," - Process multiple records in a single request",[2818,4229,4230,4234],{},[2821,4231,4233],{"href":4232},"\u002Fguides\u002Fautocomplete-api-guide","Autocomplete API Guide"," - Add LLD search suggestions to your app",[2818,4236,4237,4239],{},[2821,4238,3295],{"href":3294}," - Manage subscriptions and billing",[2818,4241,4242,4246],{},[2821,4243,4245],{"href":4244},"\u002Fpricing","Pricing"," - API plan tiers and request quotas",[2855,4248,4249],{},"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":31,"searchDepth":366,"depth":366,"links":4251},[4252,4253,4254,4259,4260,4263,4264,4265],{"id":3382,"depth":366,"text":3383},{"id":3425,"depth":366,"text":3426},{"id":3508,"depth":366,"text":3509,"children":4255},[4256,4257,4258],{"id":3515,"depth":387,"text":3516},{"id":3721,"depth":387,"text":3722},{"id":3914,"depth":387,"text":3915},{"id":3978,"depth":366,"text":3979},{"id":4014,"depth":366,"text":4015,"children":4261},[4262],{"id":4021,"depth":387,"text":4022},{"id":4154,"depth":366,"text":4155},{"id":4167,"depth":366,"text":4168},{"id":2812,"depth":366,"text":2813},"Create and manage multiple Township Canada API keys for different environments. Naming conventions, key rotation, environment variables, and CI\u002FCD setup.","i-lucide-key-round",{},"\u002Fguides\u002Fapi-key-management",{"title":3371,"description":4266},"guides\u002Fapi-key-management","y5S7M5b-MjrYZXjYnpDKKgJzo3-V9wx-qk4t04QBnso",{"id":4274,"title":4275,"body":4276,"category":2876,"description":5287,"draft":2878,"extension":2879,"icon":5288,"meta":5289,"navigation":450,"order":454,"path":5290,"seo":5291,"stem":5292,"__hash__":5293},"guides\u002Fguides\u002Fapi-troubleshooting.md","API Troubleshooting & Best Practices",{"type":7,"value":4277,"toc":5265},[4278,4284,4288,4292,4323,4329,4334,4351,4385,4388,4392,4397,4430,4434,4461,4465,4471,4476,4481,4494,4498,4501,4506,4517,4522,4553,4557,4568,4573,4591,4595,4602,4637,4641,4645,4763,4845,4849,5070,5074,5077,5083,5087,5090,5147,5150,5164,5168,5172,5179,5183,5186,5218,5222,5229,5231,5262],[10,4279,4280,4283],{},[54,4281,4282],{},"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.",[17,4285,4287],{"id":4286},"common-errors-and-what-they-mean","Common errors and what they mean",[102,4289,4291],{"id":4290},"forbidden-http-403","Forbidden (HTTP 403)",[22,4293,4297],{"className":4294,"code":4295,"language":4296,"meta":31,"style":31},"language-json shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","{ \"message\": \"Forbidden\" }\n","json",[29,4298,4299],{"__ignoreMap":31},[329,4300,4301,4303,4306,4310,4312,4314,4316,4319,4321],{"class":331,"line":332},[329,4302,2497],{"class":339},[329,4304,376],{"class":4305},"s4Jsk",[329,4307,4309],{"class":4308},"sLorS","message",[329,4311,351],{"class":4305},[329,4313,373],{"class":339},[329,4315,376],{"class":350},[329,4317,4318],{"class":354},"Forbidden",[329,4320,351],{"class":350},[329,4322,602],{"class":339},[10,4324,4325,4328],{},[54,4326,4327],{},"Cause:"," Your API key is missing, invalid, or not included correctly.",[10,4330,4331],{},[54,4332,4333],{},"Fix:",[3392,4335,4336,4342,4348],{},[2818,4337,4338,4339],{},"Confirm your API key exists: go to ",[54,4340,4341],{},"My Account → API Access",[2818,4343,4344,4345,4347],{},"Include it in the ",[29,4346,3639],{}," header (not as a URL parameter)",[2818,4349,4350],{},"Test with curl:",[22,4352,4354],{"className":3526,"code":4353,"language":3528,"meta":31,"style":31},"curl -H \"X-API-Key: YOUR_KEY\" \\\n  \"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?q=SW-25-24-1-W5\"\n",[29,4355,4356,4376],{"__ignoreMap":31},[329,4357,4358,4361,4365,4367,4370,4372],{"class":331,"line":332},[329,4359,4360],{"class":2201},"curl",[329,4362,4364],{"class":4363},"sz9Cv"," -H",[329,4366,376],{"class":350},[329,4368,4369],{"class":354},"X-API-Key: YOUR_KEY",[329,4371,351],{"class":350},[329,4373,4375],{"class":4374},"se3Ec"," \\\n",[329,4377,4378,4380,4383],{"class":331,"line":366},[329,4379,519],{"class":350},[329,4381,4382],{"class":354},"https:\u002F\u002Fdeveloper.townshipcanada.com\u002Fsearch\u002Flegal-location?q=SW-25-24-1-W5",[329,4384,1780],{"class":350},[10,4386,4387],{},"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.",[102,4389,4391],{"id":4390},"too-many-requests-http-429","Too Many Requests (HTTP 429)",[10,4393,4394,4396],{},[54,4395,4327],{}," You exceeded the rate limit for your API tier.",[126,4398,4399,4407],{},[129,4400,4401],{},[132,4402,4403,4405],{},[135,4404,3017],{},[135,4406,3023],{},[151,4408,4409,4416,4423],{},[132,4410,4411,4413],{},[156,4412,3033],{},[156,4414,4415],{},"1 request\u002Fsecond",[132,4417,4418,4420],{},[156,4419,3047],{},[156,4421,4422],{},"5 requests\u002Fsecond",[132,4424,4425,4427],{},[156,4426,3061],{},[156,4428,4429],{},"25 requests\u002Fsecond",[10,4431,4432],{},[54,4433,4333],{},[2815,4435,4436,4447,4454],{},[2818,4437,4438,4439,4442,4443,4446],{},"Add a delay between requests: ",[29,4440,4441],{},"await new Promise(r => setTimeout(r, 1000))"," in JavaScript, or ",[29,4444,4445],{},"time.sleep(1)"," in Python",[2818,4448,4449,4450,4453],{},"Use the ",[2821,4451,4452],{"href":4225},"Batch API"," instead of looping single calls - it processes up to 100 records per request",[2818,4455,4456,4457,4460],{},"If you consistently need higher throughput, ",[2821,4458,4459],{"href":3325},"contact us"," about upgrading your tier",[102,4462,4464],{"id":4463},"cors-policy-error","CORS Policy Error",[22,4466,4469],{"className":4467,"code":4468,"language":27},[25],"Access to fetch at 'https:\u002F\u002Fdeveloper.townshipcanada.com\u002F...' has been blocked by CORS policy\n",[29,4470,4468],{"__ignoreMap":31},[10,4472,4473,4475],{},[54,4474,4327],{}," 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.",[10,4477,4478],{},[54,4479,4480],{},"Fix options:",[3392,4482,4483,4489],{},[2818,4484,4485,4488],{},[54,4486,4487],{},"Proxy through your backend"," - Make the API call from your server (Node.js, Python, etc.) and return the result to your frontend",[2818,4490,4491,4493],{},[54,4492,3326],{}," - If you need direct browser access, we can add your domain to the CORS allowlist",[102,4495,4497],{"id":4496},"empty-response-no-features","Empty Response (no features)",[10,4499,4500],{},"The API returns a valid HTTP 200 response, but the result contains no features or coordinates.",[10,4502,4503],{},[54,4504,4505],{},"Possible causes:",[2815,4507,4508,4511,4514],{},[2818,4509,4510],{},"The legal description does not exist (e.g., a township\u002Frange combination that was never surveyed)",[2818,4512,4513],{},"The description is at a resolution not supported for that region",[2818,4515,4516],{},"Format is slightly wrong - the API is stricter than the web app",[10,4518,4519],{},[54,4520,4521],{},"Debugging steps:",[3392,4523,4524,4532,4542,4545],{},[2818,4525,4526,4527,4531],{},"Try the same description in the ",[2821,4528,4530],{"href":4529},"\u002Fapp","web app search box"," - does it work there?",[2818,4533,4534,4535,4538,4539,441],{},"Check that you included the full meridian (e.g., ",[29,4536,4537],{},"W5"," not just ",[29,4540,4541],{},"5",[2818,4543,4544],{},"Verify component ranges: LSD 1–16, Section 1–36, Township 1–126, Range 1–34",[2818,4546,4547,4548,4552],{},"Check the ",[2821,4549,4551],{"href":4550},"\u002Fguides\u002Fcoverage","Coverage Guide"," for resolution limits by region",[102,4554,4556],{"id":4555},"database-errors-28000-08006","Database Errors (28000, 08006)",[10,4558,4559,4560,4563,4564,4567],{},"Errors with codes like ",[29,4561,4562],{},"28000"," or ",[29,4565,4566],{},"08006"," indicate a service disruption, not an issue with your code.",[10,4569,4570],{},[54,4571,4572],{},"What to do:",[2815,4574,4575,4583,4586],{},[2818,4576,4547,4577,4582],{},[2821,4578,4581],{"href":4579,"rel":4580},"https:\u002F\u002Fstatus.townshipcanada.com\u002F",[3283],"status page"," for incident reports",[2818,4584,4585],{},"Wait a few minutes and retry",[2818,4587,4588,4589],{},"If the issue persists beyond 15 minutes, ",[2821,4590,4459],{"href":3325},[17,4592,4594],{"id":4593},"api-key-setup","API key setup",[10,4596,4597,4598,4601],{},"Quick recap of key setup (see the ",[2821,4599,4600],{"href":4269},"full API key management guide"," for details):",[3392,4603,4604,4610,4619,4625,4631],{},[2818,4605,4606,4609],{},[54,4607,4608],{},"Find your key:"," My Account → API Access",[2818,4611,4612,4615,4616,4618],{},[54,4613,4614],{},"Include in requests:"," Add the ",[29,4617,3639],{}," header to every request",[2818,4620,4621,4624],{},[54,4622,4623],{},"Test before coding:"," Use curl or Postman to confirm the key works",[2818,4626,4627,4630],{},[54,4628,4629],{},"Name your keys:"," Use descriptive names like \"production-backend\" or \"staging-test\" to keep track of which key is used where",[2818,4632,4633,4636],{},[54,4634,4635],{},"Rotate regularly:"," Generate new keys periodically and phase out old ones",[17,4638,4640],{"id":4639},"rate-limiting-best-practices","Rate limiting best practices",[102,4642,4644],{"id":4643},"add-delay-between-requests","Add delay between requests",[22,4646,4648],{"className":323,"code":4647,"language":325,"meta":31,"style":31},"\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",[29,4649,4650,4655,4679,4717,4759],{"__ignoreMap":31},[329,4651,4652],{"class":331,"line":332},[329,4653,4654],{"class":2294},"\u002F\u002F JavaScript - simple delay\n",[329,4656,4657,4660,4663,4665,4668,4672,4675,4677],{"class":331,"line":366},[329,4658,4659],{"class":3599},"for",[329,4661,4662],{"class":346}," (",[329,4664,3590],{"class":3589},[329,4666,4667],{"class":335}," query",[329,4669,4671],{"class":4670},"sVsLi"," of",[329,4673,4674],{"class":335}," queries",[329,4676,441],{"class":346},[329,4678,363],{"class":339},[329,4680,4681,4684,4687,4689,4691,4693,4696,4699,4702,4704,4706,4708,4711,4713,4715],{"class":331,"line":387},[329,4682,4683],{"class":3589},"  const",[329,4685,4686],{"class":335}," result",[329,4688,3596],{"class":339},[329,4690,3600],{"class":3599},[329,4692,3603],{"class":342},[329,4694,347],{"class":4695},"sLdnO",[329,4697,4698],{"class":335},"url",[329,4700,4701],{"class":4670}," +",[329,4703,4667],{"class":335},[329,4705,360],{"class":339},[329,4707,569],{"class":339},[329,4709,4710],{"class":335}," headers",[329,4712,2533],{"class":339},[329,4714,441],{"class":4695},[329,4716,444],{"class":339},[329,4718,4719,4722,4725,4729,4731,4733,4736,4738,4742,4745,4747,4749,4751,4754,4757],{"class":331,"line":410},[329,4720,4721],{"class":3599},"  await",[329,4723,4724],{"class":4670}," new",[329,4726,4728],{"class":4727},"sa2tF"," Promise",[329,4730,347],{"class":4695},[329,4732,347],{"class":339},[329,4734,4735],{"class":3865},"r",[329,4737,441],{"class":339},[329,4739,4741],{"class":4740},"sIOqK"," =>",[329,4743,4744],{"class":342}," setTimeout",[329,4746,347],{"class":4695},[329,4748,4735],{"class":335},[329,4750,360],{"class":339},[329,4752,4753],{"class":418}," 1000",[329,4755,4756],{"class":4695},"))",[329,4758,444],{"class":339},[329,4760,4761],{"class":331,"line":424},[329,4762,2266],{"class":339},[22,4764,4766],{"className":3748,"code":4765,"language":3721,"meta":31,"style":31},"# Python - simple delay\nimport time\nfor query in queries:\n    result = requests.get(url + query, headers=headers)\n    time.sleep(1)\n",[29,4767,4768,4773,4780,4794,4828],{"__ignoreMap":31},[329,4769,4770],{"class":331,"line":332},[329,4771,4772],{"class":2294},"# Python - simple delay\n",[329,4774,4775,4777],{"class":331,"line":366},[329,4776,3756],{"class":3599},[329,4778,4779],{"class":3759}," time\n",[329,4781,4782,4784,4787,4790,4792],{"class":331,"line":387},[329,4783,4659],{"class":3599},[329,4785,4786],{"class":3759}," query ",[329,4788,4789],{"class":3599},"in",[329,4791,4674],{"class":3759},[329,4793,4072],{"class":339},[329,4795,4796,4799,4801,4803,4805,4807,4809,4812,4815,4817,4819,4821,4823,4826],{"class":331,"line":410},[329,4797,4798],{"class":3759},"    result ",[329,4800,3538],{"class":339},[329,4802,3842],{"class":3759},[329,4804,117],{"class":339},[329,4806,3817],{"class":3789},[329,4808,347],{"class":339},[329,4810,4811],{"class":3789},"url ",[329,4813,4814],{"class":4670},"+",[329,4816,4667],{"class":3789},[329,4818,360],{"class":339},[329,4820,4710],{"class":3865},[329,4822,3538],{"class":339},[329,4824,4825],{"class":3789},"headers",[329,4827,3828],{"class":339},[329,4829,4830,4833,4835,4838,4840,4843],{"class":331,"line":424},[329,4831,4832],{"class":3759},"    time",[329,4834,117],{"class":339},[329,4836,4837],{"class":3789},"sleep",[329,4839,347],{"class":339},[329,4841,4842],{"class":418},"1",[329,4844,3828],{"class":339},[102,4846,4848],{"id":4847},"use-exponential-backoff-on-429","Use exponential backoff on 429",[22,4850,4852],{"className":323,"code":4851,"language":325,"meta":31,"style":31},"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",[29,4853,4854,4887,4925,4955,4985,5039,5043,5066],{"__ignoreMap":31},[329,4855,4856,4859,4862,4865,4867,4869,4871,4873,4875,4878,4880,4883,4885],{"class":331,"line":332},[329,4857,4858],{"class":3589},"async",[329,4860,4861],{"class":3589}," function",[329,4863,4864],{"class":342}," fetchWithBackoff",[329,4866,347],{"class":339},[329,4868,4698],{"class":3865},[329,4870,360],{"class":339},[329,4872,4710],{"class":3865},[329,4874,360],{"class":339},[329,4876,4877],{"class":3865}," maxRetries",[329,4879,3596],{"class":339},[329,4881,4882],{"class":418}," 3",[329,4884,441],{"class":339},[329,4886,363],{"class":339},[329,4888,4889,4892,4894,4897,4900,4902,4904,4907,4909,4912,4914,4916,4918,4921,4923],{"class":331,"line":366},[329,4890,4891],{"class":3599},"  for",[329,4893,4662],{"class":4695},[329,4895,4896],{"class":3589},"let",[329,4898,4899],{"class":335}," i",[329,4901,3596],{"class":339},[329,4903,419],{"class":418},[329,4905,4906],{"class":339},";",[329,4908,4899],{"class":335},[329,4910,4911],{"class":339}," \u003C",[329,4913,4877],{"class":335},[329,4915,4906],{"class":339},[329,4917,4899],{"class":335},[329,4919,4920],{"class":4670},"++",[329,4922,441],{"class":4695},[329,4924,363],{"class":339},[329,4926,4927,4930,4933,4935,4937,4939,4941,4943,4945,4947,4949,4951,4953],{"class":331,"line":387},[329,4928,4929],{"class":3589},"    const",[329,4931,4932],{"class":335}," res",[329,4934,3596],{"class":339},[329,4936,3600],{"class":3599},[329,4938,3603],{"class":342},[329,4940,347],{"class":4695},[329,4942,4698],{"class":335},[329,4944,360],{"class":339},[329,4946,569],{"class":339},[329,4948,4710],{"class":335},[329,4950,2533],{"class":339},[329,4952,441],{"class":4695},[329,4954,444],{"class":339},[329,4956,4957,4960,4962,4965,4967,4970,4973,4976,4978,4981,4983],{"class":331,"line":410},[329,4958,4959],{"class":3599},"    if",[329,4961,4662],{"class":4695},[329,4963,4964],{"class":335},"res",[329,4966,117],{"class":339},[329,4968,4969],{"class":335},"status",[329,4971,4972],{"class":4670}," !==",[329,4974,4975],{"class":418}," 429",[329,4977,441],{"class":4695},[329,4979,4980],{"class":3599}," return",[329,4982,4932],{"class":335},[329,4984,444],{"class":339},[329,4986,4987,4990,4992,4994,4996,4998,5000,5002,5004,5006,5008,5010,5012,5014,5017,5020,5022,5025,5027,5030,5032,5034,5037],{"class":331,"line":424},[329,4988,4989],{"class":3599},"    await",[329,4991,4724],{"class":4670},[329,4993,4728],{"class":4727},[329,4995,347],{"class":4695},[329,4997,347],{"class":339},[329,4999,4735],{"class":3865},[329,5001,441],{"class":339},[329,5003,4741],{"class":4740},[329,5005,4744],{"class":342},[329,5007,347],{"class":4695},[329,5009,4735],{"class":335},[329,5011,360],{"class":339},[329,5013,4753],{"class":418},[329,5015,5016],{"class":4670}," *",[329,5018,5019],{"class":335}," Math",[329,5021,117],{"class":339},[329,5023,5024],{"class":342},"pow",[329,5026,347],{"class":4695},[329,5028,5029],{"class":418},"2",[329,5031,360],{"class":339},[329,5033,4899],{"class":335},[329,5035,5036],{"class":4695},")))",[329,5038,444],{"class":339},[329,5040,5041],{"class":331,"line":435},[329,5042,3666],{"class":339},[329,5044,5045,5048,5050,5053,5055,5057,5060,5062,5064],{"class":331,"line":447},[329,5046,5047],{"class":3599},"  throw",[329,5049,4724],{"class":4670},[329,5051,5052],{"class":342}," Error",[329,5054,347],{"class":4695},[329,5056,351],{"class":350},[329,5058,5059],{"class":354},"Rate limit exceeded after retries",[329,5061,351],{"class":350},[329,5063,441],{"class":4695},[329,5065,444],{"class":339},[329,5067,5068],{"class":331,"line":454},[329,5069,2266],{"class":339},[102,5071,5073],{"id":5072},"use-the-batch-api-for-bulk-work","Use the Batch API for bulk work",[10,5075,5076],{},"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.",[10,5078,5079,5080,5082],{},"See the ",[2821,5081,4226],{"href":4225}," for chunking examples in Node.js and Python.",[17,5084,5086],{"id":5085},"format-differences-web-app-vs-api","Format differences: web app vs. API",[10,5088,5089],{},"The web app's search box is more forgiving than the API:",[126,5091,5092,5104],{},[129,5093,5094],{},[132,5095,5096,5099,5102],{},[135,5097,5098],{},"Issue",[135,5100,5101],{},"Web App",[135,5103,2918],{},[151,5105,5106,5117,5128,5137],{},[132,5107,5108,5111,5114],{},[156,5109,5110],{},"Missing \"W\" on meridian",[156,5112,5113],{},"May auto-correct",[156,5115,5116],{},"Returns empty",[132,5118,5119,5122,5125],{},[156,5120,5121],{},"Extra spaces",[156,5123,5124],{},"Handled",[156,5126,5127],{},"May cause issues",[132,5129,5130,5133,5135],{},[156,5131,5132],{},"Mixed case",[156,5134,5124],{},[156,5136,5124],{},[132,5138,5139,5142,5145],{},[156,5140,5141],{},"Partial descriptions",[156,5143,5144],{},"Shows suggestions",[156,5146,5116],{},[10,5148,5149],{},"When building API integrations, always normalize your input first:",[2815,5151,5152,5155,5158,5161],{},[2818,5153,5154],{},"Include dashes between all components",[2818,5156,5157],{},"Add the \"W\" prefix on meridians",[2818,5159,5160],{},"Remove extra text, parentheses, and place names",[2818,5162,5163],{},"Trim whitespace",[17,5165,5167],{"id":5166},"integration-patterns","Integration patterns",[102,5169,5171],{"id":5170},"caching","Caching",[10,5173,5174,5175,5178],{},"If your application looks up the same legal descriptions repeatedly, cache the results. Legal land descriptions map to fixed coordinates - the result for ",[29,5176,5177],{},"SW-25-24-1-W5"," will not change.",[102,5180,5182],{"id":5181},"error-handling","Error handling",[10,5184,5185],{},"Always handle these response codes:",[2815,5187,5188,5194,5200,5206,5212],{},[2818,5189,5190,5193],{},[54,5191,5192],{},"200"," - Success, parse the result",[2818,5195,5196,5199],{},[54,5197,5198],{},"400"," - Bad request, check your input format",[2818,5201,5202,5205],{},[54,5203,5204],{},"403"," - Authentication failed, check your API key",[2818,5207,5208,5211],{},[54,5209,5210],{},"429"," - Rate limited, wait and retry",[2818,5213,5214,5217],{},[54,5215,5216],{},"500\u002F502\u002F503"," - Server issue, retry after a short delay",[102,5219,5221],{"id":5220},"openapi-spec","OpenAPI spec",[10,5223,5224,5225,5228],{},"Download the OpenAPI specification at ",[2821,5226,5227],{"href":5227},"\u002Fopenapi.yaml"," and import it into Postman, Swagger UI, or Insomnia for interactive testing and documentation.",[17,5230,2813],{"id":2812},[2815,5232,5233,5238,5244,5251,5256],{},[2818,5234,5235,5237],{},[2821,5236,2824],{"href":2823}," - getting started with the API",[2818,5239,5240,5243],{},[2821,5241,5242],{"href":4269},"API Key Management"," - creating and managing API keys",[2818,5245,5246,5250],{},[2821,5247,5249],{"href":5248},"\u002Fguides\u002Fsearch-api-guide","Search API Guide"," - single-location lookups",[2818,5252,5253,5255],{},[2821,5254,4226],{"href":4225}," - bulk conversions",[2818,5257,5258,5261],{},[2821,5259,5260],{"href":4550},"Coverage & Limitations"," - what regions and resolutions are supported",[2855,5263,5264],{},"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":31,"searchDepth":366,"depth":366,"links":5266},[5267,5274,5275,5280,5281,5286],{"id":4286,"depth":366,"text":4287,"children":5268},[5269,5270,5271,5272,5273],{"id":4290,"depth":387,"text":4291},{"id":4390,"depth":387,"text":4391},{"id":4463,"depth":387,"text":4464},{"id":4496,"depth":387,"text":4497},{"id":4555,"depth":387,"text":4556},{"id":4593,"depth":366,"text":4594},{"id":4639,"depth":366,"text":4640,"children":5276},[5277,5278,5279],{"id":4643,"depth":387,"text":4644},{"id":4847,"depth":387,"text":4848},{"id":5072,"depth":387,"text":5073},{"id":5085,"depth":366,"text":5086},{"id":5166,"depth":366,"text":5167,"children":5282},[5283,5284,5285],{"id":5170,"depth":387,"text":5171},{"id":5181,"depth":387,"text":5182},{"id":5220,"depth":387,"text":5221},{"id":2812,"depth":366,"text":2813},"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":4275,"description":5287},"guides\u002Fapi-troubleshooting","YhFOkUOkxRyXExvO-F29ZJyxlbLEw9dMy2FCmSMog7U"]