[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"guide-energy-pack-api":3,"related-energy-pack-api":727},{"id":4,"title":5,"body":6,"category":717,"description":718,"extension":719,"icon":720,"meta":721,"navigation":722,"order":312,"path":723,"seo":724,"stem":725,"__hash__":726},"guides\u002Fguides\u002Fenergy-pack-api.md","Energy Pack API Guide",{"type":7,"value":8,"toc":699},"minimark",[9,18,23,26,44,59,66,119,126,130,137,158,161,165,172,183,213,219,222,252,258,261,458,464,471,477,480,486,493,499,502,508,524,554,558,561,565,568,634,652,656,667,671,688,695],[10,11,12,13,17],"p",{},"The Energy Pack is an add-on ($150\u002Fmo on top of Pro+ or Business, or bundled with Enterprise) that layers federal-land energy data on top of Township America's PLSS + TXSS conversion engine. Eight endpoints under ",[14,15,16],"code",{},"\u002Fapi\u002Fenergy\u002F*"," answer the workflows landmen, ALTA surveyors, solar developers, and mineral-rights investors run every day.",[19,20,22],"h2",{"id":21},"auth-and-gating","Auth and Gating",[10,24,25],{},"All Energy Pack endpoints require:",[27,28,29,37],"ol",{},[30,31,32,33],"li",{},"Authenticated user (any Pro+ or higher), ",[34,35,36],"strong",{},"and",[30,38,39,40,43],{},"Active Energy Pack add-on subscription, ",[34,41,42],{},"OR"," Enterprise tier (auto-included).",[10,45,46,47,50,51,54,55,58],{},"Unauthenticated callers get ",[14,48,49],{},"401 Unauthorized",". Pro+ users without the add-on get ",[14,52,53],{},"402 Payment Required"," with a ",[14,56,57],{},"\u002Fpricing?addon=energy_pack"," upgrade pointer.",[10,60,61,62,65],{},"A ",[14,63,64],{},"GET \u002Fapi\u002Fbilling\u002Fenergy-pack-status"," endpoint lets your UI check entitlement before showing energy-related UI:",[67,68,73],"pre",{"className":69,"code":70,"language":71,"meta":72,"style":72},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","curl -H \"Authorization: Bearer $TA_API_KEY\" \\\n  \"https:\u002F\u002Ftownshipamerica.com\u002Fapi\u002Fbilling\u002Fenergy-pack-status\"\n","bash","",[14,74,75,107],{"__ignoreMap":72},[76,77,80,84,88,92,96,100,103],"span",{"class":78,"line":79},"line",1,[76,81,83],{"class":82},"sbgvK","curl",[76,85,87],{"class":86},"stzsN"," -H",[76,89,91],{"class":90},"sjJ54"," \"",[76,93,95],{"class":94},"s_sjI","Authorization: Bearer ",[76,97,99],{"class":98},"su5hD","$TA_API_KEY",[76,101,102],{"class":90},"\"",[76,104,106],{"class":105},"s_hVV"," \\\n",[76,108,110,113,116],{"class":78,"line":109},2,[76,111,112],{"class":90},"  \"",[76,114,115],{"class":94},"https:\u002F\u002Ftownshipamerica.com\u002Fapi\u002Fbilling\u002Fenergy-pack-status",[76,117,118],{"class":90},"\"\n",[10,120,121,122,125],{},"Returns ",[14,123,124],{},"{ \"plan\": \"pro_plus\", \"eligible\": true, \"bundled\": false, \"entitled\": true, \"source\": \"addon\", \"pricing\": {...} }",".",[19,127,129],{"id":128},"section-input","Section Input",[10,131,132,133,136],{},"Every spatial endpoint accepts a ",[14,134,135],{},"section"," query parameter that can be:",[138,139,140,146,152],"ul",{},[30,141,142,143],{},"A PLSS legal description: ",[14,144,145],{},"?section=T2N+R3W+Sec+14+Huntsville+Meridian",[30,147,148,149],{},"A Texas abstract: ",[14,150,151],{},"?section=A-123+Reeves+County,+TX",[30,153,154,155],{},"A numeric lookup row id (internal): ",[14,156,157],{},"?section=42",[10,159,160],{},"The resolver runs the input through the unified parser (PLSS detection → TXSS fallback → lookup) and returns 404 if it can't resolve.",[19,162,164],{"id":163},"endpoints","Endpoints",[166,167,169],"h3",{"id":168},"get-apienergywellssectionrefbuffermiles",[14,170,171],{},"GET \u002Fapi\u002Fenergy\u002Fwells?section={ref}&buffer={miles}",[10,173,174,175,178,179,182],{},"Multi-state federal-land wells from state O&G commissions (CO\u002FND\u002FOK\u002FWY\u002FNM) plus TX RRC surface wells. Default ",[14,176,177],{},"buffer=0","; max ",[14,180,181],{},"buffer=5",". Returns up to 200 wells per state ordered by distance to section centroid.",[67,184,186],{"className":69,"code":185,"language":71,"meta":72,"style":72},"curl -H \"Authorization: Bearer $TA_API_KEY\" \\\n  \"https:\u002F\u002Ftownshipamerica.com\u002Fapi\u002Fenergy\u002Fwells?section=T2N+R3W+Sec+14+Wyoming&buffer=1\"\n",[14,187,188,204],{"__ignoreMap":72},[76,189,190,192,194,196,198,200,202],{"class":78,"line":79},[76,191,83],{"class":82},[76,193,87],{"class":86},[76,195,91],{"class":90},[76,197,95],{"class":94},[76,199,99],{"class":98},[76,201,102],{"class":90},[76,203,106],{"class":105},[76,205,206,208,211],{"class":78,"line":109},[76,207,112],{"class":90},[76,209,210],{"class":94},"https:\u002F\u002Ftownshipamerica.com\u002Fapi\u002Fenergy\u002Fwells?section=T2N+R3W+Sec+14+Wyoming&buffer=1",[76,212,118],{"class":90},[166,214,216],{"id":215},"get-apienergyleasessectionref",[14,217,218],{},"GET \u002Fapi\u002Fenergy\u002Fleases?section={ref}",[10,220,221],{},"BLM MLRS federal O&G leases intersecting a section. Returns case id, status, holder, effective \u002F expiration dates, acreage, commodity, and the polygon.",[67,223,225],{"className":69,"code":224,"language":71,"meta":72,"style":72},"curl -H \"Authorization: Bearer $TA_API_KEY\" \\\n  \"https:\u002F\u002Ftownshipamerica.com\u002Fapi\u002Fenergy\u002Fleases?section=T2N+R3W+Sec+14+Wyoming\"\n",[14,226,227,243],{"__ignoreMap":72},[76,228,229,231,233,235,237,239,241],{"class":78,"line":79},[76,230,83],{"class":82},[76,232,87],{"class":86},[76,234,91],{"class":90},[76,236,95],{"class":94},[76,238,99],{"class":98},[76,240,102],{"class":90},[76,242,106],{"class":105},[76,244,245,247,250],{"class":78,"line":109},[76,246,112],{"class":90},[76,248,249],{"class":94},"https:\u002F\u002Ftownshipamerica.com\u002Fapi\u002Fenergy\u002Fleases?section=T2N+R3W+Sec+14+Wyoming",[76,251,118],{"class":90},[166,253,255],{"id":254},"get-apienergysplit-estatesectionref",[14,256,257],{},"GET \u002Fapi\u002Fenergy\u002Fsplit-estate?section={ref}",[10,259,260],{},"Surface vs subsurface ownership flag.",[67,262,266],{"className":263,"code":264,"language":265,"meta":72,"style":72},"language-json shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"section\": { \"input\": \"...\" },\n  \"is_split_estate\": true,\n  \"surface\": { \"type\": \"private\", \"agency\": null, \"coverage_pct\": 1.0 },\n  \"subsurface\": { \"type\": \"federal\", \"agency\": \"BLM\", \"coverage_pct\": 0.98 }\n}\n","json",[14,267,268,274,310,328,390,452],{"__ignoreMap":72},[76,269,270],{"class":78,"line":79},[76,271,273],{"class":272},"sP7_E","{\n",[76,275,276,279,282,284,287,290,292,296,298,300,302,305,307],{"class":78,"line":109},[76,277,112],{"class":278},"s39Yj",[76,280,135],{"class":281},"sseR_",[76,283,102],{"class":278},[76,285,286],{"class":272},":",[76,288,289],{"class":272}," {",[76,291,91],{"class":278},[76,293,295],{"class":294},"sZMiF","input",[76,297,102],{"class":278},[76,299,286],{"class":272},[76,301,91],{"class":90},[76,303,304],{"class":94},"...",[76,306,102],{"class":90},[76,308,309],{"class":272}," },\n",[76,311,313,315,318,320,322,325],{"class":78,"line":312},3,[76,314,112],{"class":278},[76,316,317],{"class":281},"is_split_estate",[76,319,102],{"class":278},[76,321,286],{"class":272},[76,323,324],{"class":278}," true",[76,326,327],{"class":272},",\n",[76,329,331,333,336,338,340,342,344,347,349,351,353,356,358,361,363,366,368,370,373,375,377,380,382,384,388],{"class":78,"line":330},4,[76,332,112],{"class":278},[76,334,335],{"class":281},"surface",[76,337,102],{"class":278},[76,339,286],{"class":272},[76,341,289],{"class":272},[76,343,91],{"class":278},[76,345,346],{"class":294},"type",[76,348,102],{"class":278},[76,350,286],{"class":272},[76,352,91],{"class":90},[76,354,355],{"class":94},"private",[76,357,102],{"class":90},[76,359,360],{"class":272},",",[76,362,91],{"class":278},[76,364,365],{"class":294},"agency",[76,367,102],{"class":278},[76,369,286],{"class":272},[76,371,372],{"class":278}," null",[76,374,360],{"class":272},[76,376,91],{"class":278},[76,378,379],{"class":294},"coverage_pct",[76,381,102],{"class":278},[76,383,286],{"class":272},[76,385,387],{"class":386},"srdBf"," 1.0",[76,389,309],{"class":272},[76,391,393,395,398,400,402,404,406,408,410,412,414,417,419,421,423,425,427,429,431,434,436,438,440,442,444,446,449],{"class":78,"line":392},5,[76,394,112],{"class":278},[76,396,397],{"class":281},"subsurface",[76,399,102],{"class":278},[76,401,286],{"class":272},[76,403,289],{"class":272},[76,405,91],{"class":278},[76,407,346],{"class":294},[76,409,102],{"class":278},[76,411,286],{"class":272},[76,413,91],{"class":90},[76,415,416],{"class":94},"federal",[76,418,102],{"class":90},[76,420,360],{"class":272},[76,422,91],{"class":278},[76,424,365],{"class":294},[76,426,102],{"class":278},[76,428,286],{"class":272},[76,430,91],{"class":90},[76,432,433],{"class":94},"BLM",[76,435,102],{"class":90},[76,437,360],{"class":272},[76,439,91],{"class":278},[76,441,379],{"class":294},[76,443,102],{"class":278},[76,445,286],{"class":272},[76,447,448],{"class":386}," 0.98",[76,450,451],{"class":272}," }\n",[76,453,455],{"class":78,"line":454},6,[76,456,457],{"class":272},"}\n",[166,459,461],{"id":460},"get-apienergyoffset-operatorssectionrefbuffermiles",[14,462,463],{},"GET \u002Fapi\u002Fenergy\u002Foffset-operators?section={ref}&buffer={miles}",[10,465,466,467,470],{},"Distinct operators ranked by well count within a buffer. Defaults to ",[14,468,469],{},"buffer=1"," (landman convention for offset analysis).",[166,472,474],{"id":473},"get-apienergyorphaned-wellssectionrefbuffermiles",[14,475,476],{},"GET \u002Fapi\u002Fenergy\u002Forphaned-wells?section={ref}&buffer={miles}",[10,478,479],{},"USGS Defunct\u002FOrphaned Wells inside a section + buffer. Liability screen for unplugged or improperly abandoned wells that surface during federal-leasing diligence or acquisition underwriting.",[166,481,483],{"id":482},"get-apienergysage-grousesectionref",[14,484,485],{},"GET \u002Fapi\u002Fenergy\u002Fsage-grouse?section={ref}",[10,487,488,489,492],{},"BLM Sage-Grouse Habitat Management Area overlay. Returns ",[14,490,491],{},"in_habitat"," boolean plus per-designation overlap acres.",[166,494,496],{"id":495},"get-apienergyrenewable-sitingsectionref",[14,497,498],{},"GET \u002Fapi\u002Fenergy\u002Frenewable-siting?section={ref}",[10,500,501],{},"Combined NREL Land of Opportunity score + BLM Western Solar Plan zone overlap + USGS Wind Turbine proximity (2 mi).",[166,503,505],{"id":504},"get-apienergyroyaltiesleaselease_noyearsn",[14,506,507],{},"GET \u002Fapi\u002Fenergy\u002Froyalties?lease={lease_no}&years={n}",[10,509,510,511,178,514,517,518,521,522,125],{},"ONRR (Office of Natural Resources Revenue) royalty history per BLM lease. Defaults to ",[14,512,513],{},"years=10",[14,515,516],{},"30",". Note this endpoint keys on ",[14,519,520],{},"lease"," (a BLM lease number), not ",[14,523,135],{},[67,525,527],{"className":69,"code":526,"language":71,"meta":72,"style":72},"curl -H \"Authorization: Bearer $TA_API_KEY\" \\\n  \"https:\u002F\u002Ftownshipamerica.com\u002Fapi\u002Fenergy\u002Froyalties?lease=WYW-0190123&years=10\"\n",[14,528,529,545],{"__ignoreMap":72},[76,530,531,533,535,537,539,541,543],{"class":78,"line":79},[76,532,83],{"class":82},[76,534,87],{"class":86},[76,536,91],{"class":90},[76,538,95],{"class":94},[76,540,99],{"class":98},[76,542,102],{"class":90},[76,544,106],{"class":105},[76,546,547,549,552],{"class":78,"line":109},[76,548,112],{"class":90},[76,550,551],{"class":94},"https:\u002F\u002Ftownshipamerica.com\u002Fapi\u002Fenergy\u002Froyalties?lease=WYW-0190123&years=10",[76,553,118],{"class":90},[19,555,557],{"id":556},"latency-targets","Latency Targets",[10,559,560],{},"The p95 latency target across all endpoints is \u003C800 ms. The spatial queries are GIST-indexed and the per-state union queries short-circuit if any state table is missing.",[19,562,564],{"id":563},"stripe-checkout","Stripe Checkout",[10,566,567],{},"To add the Energy Pack from your application, hit the checkout endpoint:",[67,569,571],{"className":69,"code":570,"language":71,"meta":72,"style":72},"curl -X POST -H \"Authorization: Bearer $TA_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"billingCycle\": \"monthly\"}' \\\n  \"https:\u002F\u002Ftownshipamerica.com\u002Fapi\u002Fbilling\u002Fenergy-pack-checkout\"\n",[14,572,573,595,609,625],{"__ignoreMap":72},[76,574,575,577,580,583,585,587,589,591,593],{"class":78,"line":79},[76,576,83],{"class":82},[76,578,579],{"class":86}," -X",[76,581,582],{"class":94}," POST",[76,584,87],{"class":86},[76,586,91],{"class":90},[76,588,95],{"class":94},[76,590,99],{"class":98},[76,592,102],{"class":90},[76,594,106],{"class":105},[76,596,597,600,602,605,607],{"class":78,"line":109},[76,598,599],{"class":86},"  -H",[76,601,91],{"class":90},[76,603,604],{"class":94},"Content-Type: application\u002Fjson",[76,606,102],{"class":90},[76,608,106],{"class":105},[76,610,611,614,617,620,623],{"class":78,"line":312},[76,612,613],{"class":86},"  -d",[76,615,616],{"class":90}," '",[76,618,619],{"class":94},"{\"billingCycle\": \"monthly\"}",[76,621,622],{"class":90},"'",[76,624,106],{"class":105},[76,626,627,629,632],{"class":78,"line":330},[76,628,112],{"class":90},[76,630,631],{"class":94},"https:\u002F\u002Ftownshipamerica.com\u002Fapi\u002Fbilling\u002Fenergy-pack-checkout",[76,633,118],{"class":90},[10,635,636,637,640,641,644,645,648,649,125],{},"Response: ",[14,638,639],{},"{ \"url\": \"https:\u002F\u002Fcheckout.stripe.com\u002F...\", \"session_id\": \"cs_...\" }",". Redirect the user to ",[14,642,643],{},"url"," to complete checkout. The webhook handler upserts the ",[14,646,647],{},"app.subscription_addons"," row on ",[14,650,651],{},"checkout.session.completed",[19,653,655],{"id":654},"pricing","Pricing",[138,657,658,661,664],{},[30,659,660],{},"$150\u002Fmo when added to Pro+ (or higher)",[30,662,663],{},"$1,440\u002Fyr annual prepay (20% off)",[30,665,666],{},"Bundled at no additional cost with Enterprise (custom pricing)",[19,668,670],{"id":669},"related-guides","Related Guides",[138,672,673,681],{},[30,674,675,680],{},[676,677,679],"a",{"href":678},"\u002Fguides\u002Fapi-integration","API Integration"," — general patterns",[30,682,683,687],{},[676,684,686],{"href":685},"\u002Fguides\u002Ftexas-api","Texas API"," — the TXSS engine that backs Texas section input",[10,689,690,691,125],{},"Need help with an Energy Pack integration? ",[676,692,694],{"href":693},"\u002Fcontact-us","Contact us",[696,697,698],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":72,"searchDepth":109,"depth":109,"links":700},[701,702,703,713,714,715,716],{"id":21,"depth":109,"text":22},{"id":128,"depth":109,"text":129},{"id":163,"depth":109,"text":164,"children":704},[705,706,707,708,709,710,711,712],{"id":168,"depth":312,"text":171},{"id":215,"depth":312,"text":218},{"id":254,"depth":312,"text":257},{"id":460,"depth":312,"text":463},{"id":473,"depth":312,"text":476},{"id":482,"depth":312,"text":485},{"id":495,"depth":312,"text":498},{"id":504,"depth":312,"text":507},{"id":556,"depth":109,"text":557},{"id":563,"depth":109,"text":564},{"id":654,"depth":109,"text":655},{"id":669,"depth":109,"text":670},"api","Eight Pro+-gated endpoints for federal-land energy data — wells, BLM leases, split-estate, orphaned wells, Sage-Grouse, renewable siting, and ONRR royalties. Uniform across PLSS sections and Texas abstracts.","md","i-lucide-zap",{},true,"\u002Fguides\u002Fenergy-pack-api",{"title":5,"description":718},"guides\u002Fenergy-pack-api","r0vmnwiLvSKCbKRuW_8lqsV-bvyk7ifYHEcJB1k4YwU",[728,1403,1839],{"id":729,"title":730,"body":731,"category":717,"description":1397,"extension":719,"icon":1398,"meta":1399,"navigation":722,"order":79,"path":678,"seo":1400,"stem":1401,"__hash__":1402},"guides\u002Fguides\u002Fapi-integration.md","Legal Land Description API Integration Guide",{"type":7,"value":732,"toc":1359},[733,736,743,747,775,782,786,789,793,796,802,806,809,814,818,821,826,830,833,838,842,852,855,859,862,867,935,941,991,994,998,1002,1005,1009,1012,1016,1019,1023,1026,1030,1033,1037,1078,1082,1088,1108,1112,1115,1119,1122,1126,1129,1133,1136,1152,1268,1281,1285,1288,1292,1302,1306,1313,1316,1350,1356],[10,734,735],{},"Integrate Township America's legal land description services directly into your applications and workflows. Our REST APIs enable PLSS-to-coordinate conversion, autocomplete search, batch processing, and interactive grid maps—all with simple JSON responses.",[10,737,738],{},[739,740],"img",{"alt":741,"src":742},"Developer Portal","\u002Fimages\u002Fguides\u002Fapi-portal.webp",[19,744,746],{"id":745},"quick-start","Quick start",[748,749,750,754,761,765,768,772],"steps",{},[166,751,753],{"id":752},"get-an-api-key","Get an API key",[10,755,756,757,760],{},"Log into your Township America account and go to ",[34,758,759],{},"API"," in the main navigation. Subscribe to an API endpoint and create your first API key.",[166,762,764],{"id":763},"make-your-first-request","Make your first request",[10,766,767],{},"Add your API key to the request header and make a test request.",[166,769,771],{"id":770},"parse-the-response","Parse the response",[10,773,774],{},"All APIs return JSON with coordinates, legal descriptions, and metadata.",[10,776,777,778,125],{},"For full documentation and code examples, visit the ",[676,779,781],{"href":780},"\u002Fapp\u002Fapi","API documentation",[19,783,785],{"id":784},"api-endpoints","API endpoints",[10,787,788],{},"Township America offers four distinct API endpoints:",[166,790,792],{"id":791},"search-api-20month","Search API ($20\u002Fmonth)",[10,794,795],{},"Convert legal land descriptions to geographic coordinates and vice versa. Supports PLSS (Public Land Survey System) formats including township, range, section, and quarter section descriptions.",[10,797,798,801],{},[34,799,800],{},"Use cases",": Property lookup, coordinate conversion, reverse geocoding",[166,803,805],{"id":804},"autocomplete-api-20month","Autocomplete API ($20\u002Fmonth)",[10,807,808],{},"Search legal land descriptions with partial text. Returns up to 10 matching results with coordinates—ideal for search boxes and type-ahead interfaces.",[10,810,811,813],{},[34,812,800],{},": Search boxes, type-ahead, field validation",[166,815,817],{"id":816},"batch-api-40month","Batch API ($40\u002Fmonth)",[10,819,820],{},"Process up to 100 records per request. Convert lists of legal land descriptions to coordinates or coordinates to legal land descriptions.",[10,822,823,825],{},[34,824,800],{},": Bulk data processing, migration, spatial analysis",[166,827,829],{"id":828},"maps-api-20month","Maps API ($20\u002Fmonth)",[10,831,832],{},"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,834,835,837],{},[34,836,800],{},": Custom mapping applications, data visualization",[19,839,841],{"id":840},"bundled-api-access","Bundled API access",[10,843,844,851],{},[34,845,846,847],{},"Pro+ ($99\u002Fmo) and Business ($40\u002Fuser\u002Fmo) include 100,000 REST API calls\u002Fmonth and ",[676,848,850],{"href":849},"\u002Fapi\u002Fmcp","MCP server access"," as part of the web app subscription — no separate API subscription needed. If you primarily use the web app and want API access on the side, Pro+ is the most cost-effective starting point.",[10,853,854],{},"For pure API integrations without the web app, see the standalone tiers below.",[19,856,858],{"id":857},"api-pricing-tiers","API pricing tiers",[10,860,861],{},"Each API offers three pricing tiers:",[10,863,864],{},[34,865,866],{},"Search, Autocomplete & Batch APIs",[868,869,870,889],"table",{},[871,872,873],"thead",{},[874,875,876,880,883,886],"tr",{},[877,878,879],"th",{},"Tier",[877,881,882],{},"Monthly Requests",[877,884,885],{},"Rate Limit",[877,887,888],{},"Price",[890,891,892,907,921],"tbody",{},[874,893,894,898,901,904],{},[895,896,897],"td",{},"Build",[895,899,900],{},"1,000",[895,902,903],{},"1\u002Fsec",[895,905,906],{},"$20-40\u002Fmo",[874,908,909,912,915,918],{},[895,910,911],{},"Scale",[895,913,914],{},"10,000",[895,916,917],{},"5\u002Fsec",[895,919,920],{},"$100-200\u002Fmo",[874,922,923,926,929,932],{},[895,924,925],{},"Enterprise",[895,927,928],{},"100,000",[895,930,931],{},"25\u002Fsec",[895,933,934],{},"$500-1,000\u002Fmo",[10,936,937,940],{},[34,938,939],{},"Maps API"," (higher request quotas for tile rendering)",[868,942,943,955],{},[871,944,945],{},[874,946,947,949,951,953],{},[877,948,879],{},[877,950,882],{},[877,952,885],{},[877,954,888],{},[890,956,957,968,979],{},[874,958,959,961,963,965],{},[895,960,897],{},[895,962,914],{},[895,964,903],{},[895,966,967],{},"$20\u002Fmo",[874,969,970,972,974,976],{},[895,971,911],{},[895,973,928],{},[895,975,917],{},[895,977,978],{},"$100\u002Fmo",[874,980,981,983,986,988],{},[895,982,925],{},[895,984,985],{},"1,000,000",[895,987,931],{},[895,989,990],{},"$500\u002Fmo",[10,992,993],{},"Annual billing saves two months compared to monthly billing.",[19,995,997],{"id":996},"common-integration-patterns","Common integration patterns",[166,999,1001],{"id":1000},"real-estate-applications","Real Estate Applications",[10,1003,1004],{},"Add legal land description lookup to property search interfaces. Use the Autocomplete API for type-ahead search and the Search API for coordinate conversion.",[166,1006,1008],{"id":1007},"oil-gas-software","Oil & Gas Software",[10,1010,1011],{},"Integrate batch conversion for well location management. Use the Maps API to display PLSS grids in custom mapping applications.",[166,1013,1015],{"id":1014},"mobile-field-apps","Mobile Field Apps",[10,1017,1018],{},"Add PLSS search and coordinate conversion for field workers. The APIs work with any mobile development framework (React Native, Flutter, native iOS\u002FAndroid).",[166,1020,1022],{"id":1021},"gis-platforms","GIS Platforms",[10,1024,1025],{},"Enhance ArcGIS, QGIS, or custom GIS tools with legal land description support. Batch API enables bulk coordinate conversion for spatial analysis.",[166,1027,1029],{"id":1028},"agriculture-technology","Agriculture Technology",[10,1031,1032],{},"Add quarter section lookup to farm management software. Combine with soil and boundary data for precision agriculture applications.",[19,1034,1036],{"id":1035},"getting-an-api-key","Getting an API key",[748,1038,1039,1043,1049,1053,1056,1060,1067,1071],{},[166,1040,1042],{"id":1041},"open-the-developer-portal","Open the Developer Portal",[10,1044,1045,1046,1048],{},"Go to ",[34,1047,759],{}," in the main navigation to access the Developer Portal.",[166,1050,1052],{"id":1051},"subscribe-to-an-api","Subscribe to an API",[10,1054,1055],{},"Click on the API you want to use (Search, Autocomplete, Batch, or Maps). Select a tier and complete payment.",[166,1057,1059],{"id":1058},"create-an-api-key","Create an API key",[10,1061,1062,1063,1066],{},"Click ",[34,1064,1065],{},"+ Add Key"," and give your key a descriptive name. Copy the key immediately—it won't be shown again.",[166,1068,1070],{"id":1069},"use-your-key","Use your key",[10,1072,1073,1074,1077],{},"Include the API key in the ",[14,1075,1076],{},"x-api-key"," header for all requests.",[19,1079,1081],{"id":1080},"managing-api-subscriptions","Managing API subscriptions",[10,1083,1084,1085,1087],{},"Manage your API subscriptions from the ",[34,1086,759],{}," page in the main navigation. The Developer Portal provides:",[138,1089,1090,1096,1102],{},[30,1091,1092,1095],{},[34,1093,1094],{},"Overview",": View all your API keys and subscriptions",[30,1097,1098,1101],{},[34,1099,1100],{},"Logs",": Monitor API requests with timestamps and response codes",[30,1103,1104,1107],{},[34,1105,1106],{},"Alerts",": Configure usage threshold notifications",[166,1109,1111],{"id":1110},"usage-monitoring","Usage monitoring",[10,1113,1114],{},"Track your API usage in real-time from the Overview tab. Usage resets at the start of each billing period.",[166,1116,1118],{"id":1117},"rate-limiting","Rate limiting",[10,1120,1121],{},"Exceeding your rate limit results in HTTP 429 Too Many Requests responses. Implement exponential backoff in your integration to handle rate limits gracefully.",[166,1123,1125],{"id":1124},"quota-management","Quota management",[10,1127,1128],{},"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.",[19,1130,1132],{"id":1131},"python-sdk","Python SDK",[10,1134,1135],{},"The official Python SDK wraps all API endpoints with typed responses, sync and async clients, and batch support. Install from PyPI:",[67,1137,1139],{"className":69,"code":1138,"language":71,"meta":72,"style":72},"pip install townshipamerica\n",[14,1140,1141],{"__ignoreMap":72},[76,1142,1143,1146,1149],{"class":78,"line":79},[76,1144,1145],{"class":82},"pip",[76,1147,1148],{"class":94}," install",[76,1150,1151],{"class":94}," townshipamerica\n",[67,1153,1157],{"className":1154,"code":1155,"language":1156,"meta":72,"style":72},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","from townshipamerica import TownshipAmerica\n\nclient = TownshipAmerica(api_key=\"your_api_key\")\nresult = client.search(\"NENE 12 4N 5E Indian Meridian\")\nprint(result.features[0].properties)\n","python",[14,1158,1159,1174,1179,1211,1237],{"__ignoreMap":72},[76,1160,1161,1165,1168,1171],{"class":78,"line":79},[76,1162,1164],{"class":1163},"sVHd0","from",[76,1166,1167],{"class":98}," townshipamerica ",[76,1169,1170],{"class":1163},"import",[76,1172,1173],{"class":98}," TownshipAmerica\n",[76,1175,1176],{"class":78,"line":109},[76,1177,1178],{"emptyLinePlaceholder":722},"\n",[76,1180,1181,1184,1188,1192,1195,1199,1201,1203,1206,1208],{"class":78,"line":312},[76,1182,1183],{"class":98},"client ",[76,1185,1187],{"class":1186},"smGrS","=",[76,1189,1191],{"class":1190},"slqww"," TownshipAmerica",[76,1193,1194],{"class":272},"(",[76,1196,1198],{"class":1197},"s99_P","api_key",[76,1200,1187],{"class":1186},[76,1202,102],{"class":90},[76,1204,1205],{"class":94},"your_api_key",[76,1207,102],{"class":90},[76,1209,1210],{"class":272},")\n",[76,1212,1213,1216,1218,1221,1223,1226,1228,1230,1233,1235],{"class":78,"line":330},[76,1214,1215],{"class":98},"result ",[76,1217,1187],{"class":1186},[76,1219,1220],{"class":98}," client",[76,1222,125],{"class":272},[76,1224,1225],{"class":1190},"search",[76,1227,1194],{"class":272},[76,1229,102],{"class":90},[76,1231,1232],{"class":94},"NENE 12 4N 5E Indian Meridian",[76,1234,102],{"class":90},[76,1236,1210],{"class":272},[76,1238,1239,1243,1245,1248,1250,1254,1257,1260,1263,1266],{"class":78,"line":392},[76,1240,1242],{"class":1241},"sptTA","print",[76,1244,1194],{"class":272},[76,1246,1247],{"class":1190},"result",[76,1249,125],{"class":272},[76,1251,1253],{"class":1252},"skxfh","features",[76,1255,1256],{"class":272},"[",[76,1258,1259],{"class":386},"0",[76,1261,1262],{"class":272},"].",[76,1264,1265],{"class":1252},"properties",[76,1267,1210],{"class":272},[10,1269,1270,1271,1275,1276,1280],{},"MIT license. Python 3.9+. See the ",[676,1272,1274],{"href":1273},"\u002Fguides\u002Fpython-sdk","Python SDK Quick Start"," for full usage, or ",[676,1277,1279],{"href":1278},"\u002Fguides\u002Fpython-sdk-advanced","Advanced Patterns"," for async, GeoPandas, and production workflows.",[19,1282,1284],{"id":1283},"code-examples","Code examples",[10,1286,1287],{},"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.",[19,1289,1291],{"id":1290},"checking-system-health","Checking system health",[10,1293,1294,1295,1301],{},"For the current status of Township America's APIs, including uptime, response time, and incident history, visit ",[676,1296,1300],{"href":1297,"rel":1298},"https:\u002F\u002Fstatus.townshipamerica.com",[1299],"nofollow","status.townshipamerica.com",". This site provides real-time updates on API system health.",[19,1303,1305],{"id":1304},"mcp-server","MCP server",[10,1307,1308,1309,1312],{},"Pro+ and Business plans also include access to the ",[676,1310,1311],{"href":849},"MCP Server"," — a Model Context Protocol integration that lets AI agents in Claude Desktop, Cursor, Continue, or Cline call the PLSS API directly. No additional configuration beyond your Pro+ API key.",[19,1314,1315],{"id":669},"Related guides",[138,1317,1318,1323,1329,1336,1343],{},[30,1319,1320,1322],{},[676,1321,1274],{"href":1273}," - Install and convert PLSS descriptions in four lines of Python",[30,1324,1325,1328],{},[676,1326,1327],{"href":1278},"Python SDK Advanced Patterns"," - Async, GeoPandas, and production workflows",[30,1330,1331,1335],{},[676,1332,1334],{"href":1333},"\u002Fguides\u002Faccount-management","Account Management"," - Manage billing for API subscriptions",[30,1337,1338,1342],{},[676,1339,1341],{"href":1340},"\u002Fguides\u002Fbatch-conversion","Batch Conversion"," - Web interface for batch processing",[30,1344,1345,1349],{},[676,1346,1348],{"href":1347},"\u002Fguides\u002Fmap","Interactive Maps"," - Map features available through the Maps API",[10,1351,1352,1353,1355],{},"Need help with your integration? ",[676,1354,694],{"href":693}," for technical support and custom API solutions.",[696,1357,1358],{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":72,"searchDepth":109,"depth":109,"links":1360},[1361,1366,1372,1373,1374,1381,1387,1392,1393,1394,1395,1396],{"id":745,"depth":109,"text":746,"children":1362},[1363,1364,1365],{"id":752,"depth":312,"text":753},{"id":763,"depth":312,"text":764},{"id":770,"depth":312,"text":771},{"id":784,"depth":109,"text":785,"children":1367},[1368,1369,1370,1371],{"id":791,"depth":312,"text":792},{"id":804,"depth":312,"text":805},{"id":816,"depth":312,"text":817},{"id":828,"depth":312,"text":829},{"id":840,"depth":109,"text":841},{"id":857,"depth":109,"text":858},{"id":996,"depth":109,"text":997,"children":1375},[1376,1377,1378,1379,1380],{"id":1000,"depth":312,"text":1001},{"id":1007,"depth":312,"text":1008},{"id":1014,"depth":312,"text":1015},{"id":1021,"depth":312,"text":1022},{"id":1028,"depth":312,"text":1029},{"id":1035,"depth":109,"text":1036,"children":1382},[1383,1384,1385,1386],{"id":1041,"depth":312,"text":1042},{"id":1051,"depth":312,"text":1052},{"id":1058,"depth":312,"text":1059},{"id":1069,"depth":312,"text":1070},{"id":1080,"depth":109,"text":1081,"children":1388},[1389,1390,1391],{"id":1110,"depth":312,"text":1111},{"id":1117,"depth":312,"text":1118},{"id":1124,"depth":312,"text":1125},{"id":1131,"depth":109,"text":1132},{"id":1283,"depth":109,"text":1284},{"id":1290,"depth":109,"text":1291},{"id":1304,"depth":109,"text":1305},{"id":669,"depth":109,"text":1315},"Integrate legal land description APIs into your applications. Convert PLSS descriptions to coordinates, add autocomplete search, process batch records, and display survey grid maps. REST API with JSON responses.","i-lucide-code",{},{"title":730,"description":1397},"guides\u002Fapi-integration","W9wx6ihcI9xWT3Lj7DJnwGTlnlk1WVzCu4WnXzWjiH8",{"id":1404,"title":1405,"body":1406,"category":717,"description":1832,"extension":719,"icon":1833,"meta":1834,"navigation":722,"order":454,"path":1835,"seo":1836,"stem":1837,"__hash__":1838},"guides\u002Fguides\u002Fgoogle-sheets-add-on.md","Google Sheets Add-on — PLSS to GPS Conversion in Spreadsheets",{"type":7,"value":1407,"toc":1807},[1408,1411,1418,1422,1469,1473,1476,1586,1590,1597,1601,1604,1612,1615,1621,1624,1628,1635,1638,1660,1663,1667,1670,1731,1734,1738,1742,1745,1749,1756,1760,1766,1770,1773,1777],[10,1409,1410],{},"Convert PLSS legal land descriptions to GPS coordinates directly inside Google Sheets — no copy-pasting into a separate tool, no manual re-entry.",[10,1412,1413,1414,1417],{},"The ",[34,1415,1416],{},"Township America PLSS Converter"," add-on is available on the Google Workspace Marketplace. It supports batch column conversion, cell formulas, and a freemium model (10 free conversions\u002Fmonth, unlimited with a Township America API key).",[19,1419,1421],{"id":1420},"install-the-add-on","Install the add-on",[748,1423,1424,1428,1431,1435,1440,1444,1454,1458],{},[166,1425,1427],{"id":1426},"open-google-sheets","Open Google Sheets",[10,1429,1430],{},"Open any Google Sheets spreadsheet.",[166,1432,1434],{"id":1433},"open-the-add-ons-dialog","Open the Add-ons dialog",[10,1436,1045,1437,125],{},[34,1438,1439],{},"Extensions → Add-ons → Get add-ons",[166,1441,1443],{"id":1442},"search-and-install","Search and install",[10,1445,1446,1447,1449,1450,1453],{},"Search for ",[34,1448,1416],{},", click the listing, then click ",[34,1451,1452],{},"Install",". Grant the requested permissions (read\u002Fwrite the current spreadsheet; show sidebar dialogs).",[166,1455,1457],{"id":1456},"open-the-converter","Open the converter",[10,1459,1460,1461,1464,1465,1468],{},"After installation, the ",[34,1462,1463],{},"Township America"," menu appears in the menu bar. Click ",[34,1466,1467],{},"Extensions → Township America → Open Converter"," to open the sidebar.",[19,1470,1472],{"id":1471},"batch-column-conversion","Batch column conversion",[10,1474,1475],{},"The most common workflow: convert an entire column of PLSS descriptions to lat\u002Flng pairs.",[748,1477,1478,1482,1485,1545,1549,1553,1557,1579,1583],{},[166,1479,1481],{"id":1480},"enter-descriptions-in-a-column","Enter descriptions in a column",[10,1483,1484],{},"Put your PLSS descriptions in a spreadsheet column — one per row. For example:",[868,1486,1487,1500],{},[871,1488,1489],{},[874,1490,1491,1494,1497],{},[877,1492,1493],{},"A",[877,1495,1496],{},"B",[877,1498,1499],{},"C",[890,1501,1502,1519,1528,1536],{},[874,1503,1504,1509,1514],{},[895,1505,1506],{},[34,1507,1508],{},"PLSS Description",[895,1510,1511],{},[34,1512,1513],{},"Latitude",[895,1515,1516],{},[34,1517,1518],{},"Longitude",[874,1520,1521,1524,1526],{},[895,1522,1523],{},"NE 14 5N 3W 6th Meridian",[895,1525],{},[895,1527],{},[874,1529,1530,1532,1534],{},[895,1531,1232],{},[895,1533],{},[895,1535],{},[874,1537,1538,1541,1543],{},[895,1539,1540],{},"SW 22 3S 68W 6th PM",[895,1542],{},[895,1544],{},[166,1546,1548],{"id":1547},"open-the-converter-sidebar","Open the converter sidebar",[10,1550,1551],{},[34,1552,1467],{},[166,1554,1556],{"id":1555},"set-the-input-and-output-ranges","Set the input and output ranges",[138,1558,1559,1569],{},[30,1560,1561,1564,1565,1568],{},[34,1562,1563],{},"Input range",": the cell range containing your descriptions (e.g. ",[14,1566,1567],{},"A2:A100",")",[30,1570,1571,1574,1575,1578],{},[34,1572,1573],{},"Output cell",": the first cell for latitude output (e.g. ",[14,1576,1577],{},"B2","). Longitude is written to the next column automatically.",[166,1580,1582],{"id":1581},"click-convert-column","Click Convert Column",[10,1584,1585],{},"Results appear in the output columns. Rows that could not be converted show an error message in the cell.",[166,1587,1589],{"id":1588},"menu-shortcut","Menu shortcut",[10,1591,1592,1593,1596],{},"Select a column of PLSS descriptions, then choose ",[34,1594,1595],{},"Extensions → Township America → Convert Selected Column",". Latitude and longitude are written to the adjacent two columns without opening the sidebar.",[19,1598,1600],{"id":1599},"cell-formulas","Cell formulas",[10,1602,1603],{},"For single conversions or building formulas that reference other cells, use the custom functions:",[67,1605,1610],{"className":1606,"code":1608,"language":1609},[1607],"language-text","=PLSS_TO_LAT(\"NE 14 5N 3W 6th Meridian\")\n=PLSS_TO_LNG(\"NE 14 5N 3W 6th Meridian\")\n","text",[14,1611,1608],{"__ignoreMap":72},[10,1613,1614],{},"You can also reference another cell:",[67,1616,1619],{"className":1617,"code":1618,"language":1609},[1607],"=PLSS_TO_LAT(A2)\n=PLSS_TO_LNG(A2)\n",[14,1620,1618],{"__ignoreMap":72},[10,1622,1623],{},"Cell formulas count against the same monthly free limit as batch conversions.",[19,1625,1627],{"id":1626},"freemium-limits-and-api-keys","Freemium limits and API keys",[10,1629,1630,1631,1634],{},"The add-on includes ",[34,1632,1633],{},"10 free conversions per calendar month"," — no API key required. Free conversions reset on the 1st of each month.",[10,1636,1637],{},"For unlimited conversions, add a Township America API key:",[27,1639,1640,1647,1650],{},[30,1641,1045,1642,1646],{},[676,1643,1645],{"href":1644},"\u002Fapi","townshipamerica.com\u002Fapi"," and subscribe to the Search API (Build tier, $40\u002Fmo — includes 1,000 conversions\u002Fmonth).",[30,1648,1649],{},"Create an API key in the Developer Portal.",[30,1651,1652,1653,1656,1657,125],{},"In Google Sheets, open ",[34,1654,1655],{},"Extensions → Township America → Settings",", paste your key, and click ",[34,1658,1659],{},"Save Key",[10,1661,1662],{},"Your API key is stored securely in your Google account's user properties and is only sent to the Township America API.",[19,1664,1666],{"id":1665},"supported-plss-formats","Supported PLSS formats",[10,1668,1669],{},"The add-on accepts any description format understood by the Township America API:",[868,1671,1672,1682],{},[871,1673,1674],{},[874,1675,1676,1679],{},[877,1677,1678],{},"Format",[877,1680,1681],{},"Example",[890,1683,1684,1693,1702,1712,1722],{},[874,1685,1686,1689],{},[895,1687,1688],{},"Quarter section",[895,1690,1691],{},[14,1692,1523],{},[874,1694,1695,1698],{},[895,1696,1697],{},"Quarter-quarter section",[895,1699,1700],{},[14,1701,1232],{},[874,1703,1704,1707],{},[895,1705,1706],{},"Section",[895,1708,1709],{},[14,1710,1711],{},"Sec 12 T4N R5E Indian Meridian",[874,1713,1714,1717],{},[895,1715,1716],{},"Township",[895,1718,1719],{},[14,1720,1721],{},"T4N R5E 6th PM",[874,1723,1724,1727],{},[895,1725,1726],{},"Abbreviated PM",[895,1728,1729],{},[14,1730,1540],{},[10,1732,1733],{},"Coverage includes all 30 PLSS states.",[19,1735,1737],{"id":1736},"troubleshooting","Troubleshooting",[166,1739,1741],{"id":1740},"no-results-found","\"No results found\"",[10,1743,1744],{},"The description may not match a known PLSS location. Check spelling, meridian name, and township\u002Frange direction (N\u002FS, E\u002FW).",[166,1746,1748],{"id":1747},"free-limit-reached","\"Free limit reached\"",[10,1750,1751,1752,1755],{},"You've used your 10 free conversions for the month. Add an API key in ",[34,1753,1754],{},"Settings"," to continue, or wait until the 1st of next month.",[166,1757,1759],{"id":1758},"invalid-api-key","\"Invalid API key\"",[10,1761,1762,1763,125],{},"Double-check your key in the Settings dialog. Keys are generated in the ",[676,1764,1765],{"href":1644},"Township America Developer Portal",[166,1767,1769],{"id":1768},"network-error","\"Network error\"",[10,1771,1772],{},"Google Sheets could not reach the Township America API. Check your internet connection and try again.",[19,1774,1776],{"id":1775},"related-resources","Related resources",[138,1778,1779,1784,1790,1795,1801],{},[30,1780,1781,1783],{},[676,1782,781],{"href":1644}," — full reference for the Township America REST API",[30,1785,1786,1789],{},[676,1787,1788],{"href":678},"API integration guide"," — authenticate and make API requests from any app",[30,1791,1792,1794],{},[676,1793,1132],{"href":1273}," — convert PLSS descriptions from Python scripts",[30,1796,1797,1800],{},[676,1798,1799],{"href":1340},"Batch conversion"," — web-based batch processing without spreadsheets",[30,1802,1803,1806],{},[676,1804,1805],{"href":693},"Contact support"," — help with the add-on or API access",{"title":72,"searchDepth":109,"depth":109,"links":1808},[1809,1815,1822,1823,1824,1825,1831],{"id":1420,"depth":109,"text":1421,"children":1810},[1811,1812,1813,1814],{"id":1426,"depth":312,"text":1427},{"id":1433,"depth":312,"text":1434},{"id":1442,"depth":312,"text":1443},{"id":1456,"depth":312,"text":1457},{"id":1471,"depth":109,"text":1472,"children":1816},[1817,1818,1819,1820,1821],{"id":1480,"depth":312,"text":1481},{"id":1547,"depth":312,"text":1548},{"id":1555,"depth":312,"text":1556},{"id":1581,"depth":312,"text":1582},{"id":1588,"depth":312,"text":1589},{"id":1599,"depth":109,"text":1600},{"id":1626,"depth":109,"text":1627},{"id":1665,"depth":109,"text":1666},{"id":1736,"depth":109,"text":1737,"children":1826},[1827,1828,1829,1830],{"id":1740,"depth":312,"text":1741},{"id":1747,"depth":312,"text":1748},{"id":1758,"depth":312,"text":1759},{"id":1768,"depth":312,"text":1769},{"id":1775,"depth":109,"text":1776},"Convert PLSS legal land descriptions to GPS coordinates directly in Google Sheets. Free add-on with 10 conversions\u002Fmonth, unlimited with API key. Batch column conversion, cell formulas, and API key management.","i-lucide-table",{},"\u002Fguides\u002Fgoogle-sheets-add-on",{"title":1405,"description":1832},"guides\u002Fgoogle-sheets-add-on","z9LFqa-obnS7Wo8iDgWkSJ44arAzT9393kEIbg3C_BY",{"id":1840,"title":1841,"body":1842,"category":717,"description":3039,"extension":719,"icon":3040,"meta":3041,"navigation":722,"order":109,"path":1273,"seo":3042,"stem":3043,"__hash__":3044},"guides\u002Fguides\u002Fpython-sdk.md","Python SDK Quick Start — PLSS Coordinate Conversion in Python",{"type":7,"value":1843,"toc":3025},[1844,1851,1855,1858,1870,1881,1885,2083,2093,2097,2100,2177,2196,2239,2243,2246,2333,2339,2405,2408,2411,2568,2571,2658,2662,2665,2890,2894,2901,2991,2993,3011,3022],[10,1845,1846,1847,1850],{},"Convert PLSS legal land descriptions to GPS coordinates in Python with the official ",[14,1848,1849],{},"townshipamerica"," package. MIT license, typed Pydantic v2 models, sync and async clients.",[19,1852,1854],{"id":1853},"installation","Installation",[10,1856,1857],{},"Install from PyPI with pip:",[67,1859,1860],{"className":69,"code":1138,"language":71,"meta":72,"style":72},[14,1861,1862],{"__ignoreMap":72},[76,1863,1864,1866,1868],{"class":78,"line":79},[76,1865,1145],{"class":82},[76,1867,1148],{"class":94},[76,1869,1151],{"class":94},[10,1871,1872,1873,1876,1877,1880],{},"Requires Python 3.9 or later. Dependencies (",[14,1874,1875],{},"httpx",", ",[14,1878,1879],{},"pydantic",") install automatically.",[19,1882,1884],{"id":1883},"your-first-conversion","Your first conversion",[748,1886,1887,1889,1898,1902,1905,1927,1931],{},[166,1888,753],{"id":752},[10,1890,1891,1892,1897],{},"Sign up at ",[676,1893,1896],{"href":1894,"rel":1895},"https:\u002F\u002Ftownshipamerica.com\u002Fapp",[1299],"townshipamerica.com\u002Fapp"," and subscribe to the Search API from the Developer Portal.",[166,1899,1901],{"id":1900},"set-your-api-key","Set your API key",[10,1903,1904],{},"Store your key as an environment variable — never hardcode it in source files.",[67,1906,1908],{"className":69,"code":1907,"language":71,"meta":72,"style":72},"export TOWNSHIPAMERICA_API_KEY=\"your_api_key\"\n",[14,1909,1910],{"__ignoreMap":72},[76,1911,1912,1916,1919,1921,1923,1925],{"class":78,"line":79},[76,1913,1915],{"class":1914},"sbsja","export",[76,1917,1918],{"class":98}," TOWNSHIPAMERICA_API_KEY",[76,1920,1187],{"class":1186},[76,1922,102],{"class":90},[76,1924,1205],{"class":94},[76,1926,118],{"class":90},[166,1928,1930],{"id":1929},"convert-a-plss-description","Convert a PLSS description",[67,1932,1934],{"className":1154,"code":1933,"language":1156,"meta":72,"style":72},"import os\nfrom townshipamerica import TownshipAmerica\n\nclient = TownshipAmerica(api_key=os.environ[\"TOWNSHIPAMERICA_API_KEY\"])\nresult = client.search(\"NENE 12 4N 5E Indian Meridian\")\n\nfeature = result.features[0]\nprint(feature.properties)           # Section metadata\nprint(feature.geometry.coordinates) # Boundary polygon\n",[14,1935,1936,1943,1953,1957,1991,2013,2017,2039,2059],{"__ignoreMap":72},[76,1937,1938,1940],{"class":78,"line":79},[76,1939,1170],{"class":1163},[76,1941,1942],{"class":98}," os\n",[76,1944,1945,1947,1949,1951],{"class":78,"line":109},[76,1946,1164],{"class":1163},[76,1948,1167],{"class":98},[76,1950,1170],{"class":1163},[76,1952,1173],{"class":98},[76,1954,1955],{"class":78,"line":312},[76,1956,1178],{"emptyLinePlaceholder":722},[76,1958,1959,1961,1963,1965,1967,1969,1971,1974,1976,1979,1981,1983,1986,1988],{"class":78,"line":330},[76,1960,1183],{"class":98},[76,1962,1187],{"class":1186},[76,1964,1191],{"class":1190},[76,1966,1194],{"class":272},[76,1968,1198],{"class":1197},[76,1970,1187],{"class":1186},[76,1972,1973],{"class":1190},"os",[76,1975,125],{"class":272},[76,1977,1978],{"class":1252},"environ",[76,1980,1256],{"class":272},[76,1982,102],{"class":90},[76,1984,1985],{"class":94},"TOWNSHIPAMERICA_API_KEY",[76,1987,102],{"class":90},[76,1989,1990],{"class":272},"])\n",[76,1992,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011],{"class":78,"line":392},[76,1994,1215],{"class":98},[76,1996,1187],{"class":1186},[76,1998,1220],{"class":98},[76,2000,125],{"class":272},[76,2002,1225],{"class":1190},[76,2004,1194],{"class":272},[76,2006,102],{"class":90},[76,2008,1232],{"class":94},[76,2010,102],{"class":90},[76,2012,1210],{"class":272},[76,2014,2015],{"class":78,"line":454},[76,2016,1178],{"emptyLinePlaceholder":722},[76,2018,2020,2023,2025,2028,2030,2032,2034,2036],{"class":78,"line":2019},7,[76,2021,2022],{"class":98},"feature ",[76,2024,1187],{"class":1186},[76,2026,2027],{"class":98}," result",[76,2029,125],{"class":272},[76,2031,1253],{"class":1252},[76,2033,1256],{"class":272},[76,2035,1259],{"class":386},[76,2037,2038],{"class":272},"]\n",[76,2040,2042,2044,2046,2049,2051,2053,2055],{"class":78,"line":2041},8,[76,2043,1242],{"class":1241},[76,2045,1194],{"class":272},[76,2047,2048],{"class":1190},"feature",[76,2050,125],{"class":272},[76,2052,1265],{"class":1252},[76,2054,1568],{"class":272},[76,2056,2058],{"class":2057},"sutJx","           # Section metadata\n",[76,2060,2062,2064,2066,2068,2070,2073,2075,2078,2080],{"class":78,"line":2061},9,[76,2063,1242],{"class":1241},[76,2065,1194],{"class":272},[76,2067,2048],{"class":1190},[76,2069,125],{"class":272},[76,2071,2072],{"class":1252},"geometry",[76,2074,125],{"class":272},[76,2076,2077],{"class":1252},"coordinates",[76,2079,1568],{"class":272},[76,2081,2082],{"class":2057}," # Boundary polygon\n",[10,2084,2085,2086,2088,2089,2092],{},"That's it — ",[14,2087,1247],{}," is a typed ",[14,2090,2091],{},"FeatureCollection"," with GeoJSON geometry and PLSS metadata.",[19,2094,2096],{"id":2095},"reverse-geocoding","Reverse geocoding",[10,2098,2099],{},"Find the PLSS legal land description at a GPS coordinate:",[67,2101,2103],{"className":1154,"code":2102,"language":1156,"meta":72,"style":72},"result = client.reverse(-97.5, 36.1)\n\nfeature = result.features[0]\nprint(feature.properties.descriptor)  # \"NWSE 15 4N 7W Indian Meridian\"\n",[14,2104,2105,2133,2137,2155],{"__ignoreMap":72},[76,2106,2107,2109,2111,2113,2115,2118,2120,2123,2126,2128,2131],{"class":78,"line":79},[76,2108,1215],{"class":98},[76,2110,1187],{"class":1186},[76,2112,1220],{"class":98},[76,2114,125],{"class":272},[76,2116,2117],{"class":1190},"reverse",[76,2119,1194],{"class":272},[76,2121,2122],{"class":1186},"-",[76,2124,2125],{"class":386},"97.5",[76,2127,360],{"class":272},[76,2129,2130],{"class":386}," 36.1",[76,2132,1210],{"class":272},[76,2134,2135],{"class":78,"line":109},[76,2136,1178],{"emptyLinePlaceholder":722},[76,2138,2139,2141,2143,2145,2147,2149,2151,2153],{"class":78,"line":312},[76,2140,2022],{"class":98},[76,2142,1187],{"class":1186},[76,2144,2027],{"class":98},[76,2146,125],{"class":272},[76,2148,1253],{"class":1252},[76,2150,1256],{"class":272},[76,2152,1259],{"class":386},[76,2154,2038],{"class":272},[76,2156,2157,2159,2161,2163,2165,2167,2169,2172,2174],{"class":78,"line":330},[76,2158,1242],{"class":1241},[76,2160,1194],{"class":272},[76,2162,2048],{"class":1190},[76,2164,125],{"class":272},[76,2166,1265],{"class":1252},[76,2168,125],{"class":272},[76,2170,2171],{"class":1252},"descriptor",[76,2173,1568],{"class":272},[76,2175,2176],{"class":2057},"  # \"NWSE 15 4N 7W Indian Meridian\"\n",[10,2178,1413,2179,2182,2183,1876,2186,1876,2189,2192,2193,286],{},[14,2180,2181],{},"unit"," parameter controls precision — ",[14,2184,2185],{},"\"Township\"",[14,2187,2188],{},"\"Section\"",[14,2190,2191],{},"\"Quarter Section\"",", or ",[14,2194,2195],{},"\"all\"",[67,2197,2199],{"className":1154,"code":2198,"language":1156,"meta":72,"style":72},"result = client.reverse(-97.5, 36.1, unit=\"Quarter Section\")\n",[14,2200,2201],{"__ignoreMap":72},[76,2202,2203,2205,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2228,2230,2232,2235,2237],{"class":78,"line":79},[76,2204,1215],{"class":98},[76,2206,1187],{"class":1186},[76,2208,1220],{"class":98},[76,2210,125],{"class":272},[76,2212,2117],{"class":1190},[76,2214,1194],{"class":272},[76,2216,2122],{"class":1186},[76,2218,2125],{"class":386},[76,2220,360],{"class":272},[76,2222,2130],{"class":386},[76,2224,360],{"class":272},[76,2226,2227],{"class":1197}," unit",[76,2229,1187],{"class":1186},[76,2231,102],{"class":90},[76,2233,2234],{"class":94},"Quarter Section",[76,2236,102],{"class":90},[76,2238,1210],{"class":272},[19,2240,2242],{"id":2241},"autocomplete","Autocomplete",[10,2244,2245],{},"Add type-ahead search for PLSS descriptions:",[67,2247,2249],{"className":1154,"code":2248,"language":1156,"meta":72,"style":72},"suggestions = client.autocomplete(\"T4N R5E\", limit=5)\nfor item in suggestions.results:\n    print(item.text, item.location)\n",[14,2250,2251,2285,2307],{"__ignoreMap":72},[76,2252,2253,2256,2258,2260,2262,2264,2266,2268,2271,2273,2275,2278,2280,2283],{"class":78,"line":79},[76,2254,2255],{"class":98},"suggestions ",[76,2257,1187],{"class":1186},[76,2259,1220],{"class":98},[76,2261,125],{"class":272},[76,2263,2241],{"class":1190},[76,2265,1194],{"class":272},[76,2267,102],{"class":90},[76,2269,2270],{"class":94},"T4N R5E",[76,2272,102],{"class":90},[76,2274,360],{"class":272},[76,2276,2277],{"class":1197}," limit",[76,2279,1187],{"class":1186},[76,2281,2282],{"class":386},"5",[76,2284,1210],{"class":272},[76,2286,2287,2290,2293,2296,2299,2301,2304],{"class":78,"line":109},[76,2288,2289],{"class":1163},"for",[76,2291,2292],{"class":98}," item ",[76,2294,2295],{"class":1163},"in",[76,2297,2298],{"class":98}," suggestions",[76,2300,125],{"class":272},[76,2302,2303],{"class":1252},"results",[76,2305,2306],{"class":272},":\n",[76,2308,2309,2312,2314,2317,2319,2321,2323,2326,2328,2331],{"class":78,"line":312},[76,2310,2311],{"class":1241},"    print",[76,2313,1194],{"class":272},[76,2315,2316],{"class":1190},"item",[76,2318,125],{"class":272},[76,2320,1609],{"class":1252},[76,2322,360],{"class":272},[76,2324,2325],{"class":1190}," item",[76,2327,125],{"class":272},[76,2329,2330],{"class":1252},"location",[76,2332,1210],{"class":272},[10,2334,1413,2335,2338],{},[14,2336,2337],{},"proximity"," parameter biases results toward a GPS coordinate:",[67,2340,2342],{"className":1154,"code":2341,"language":1156,"meta":72,"style":72},"suggestions = client.autocomplete(\n    \"T4N\",\n    limit=5,\n    proximity=(-97.5, 36.1)\n)\n",[14,2343,2344,2359,2371,2382,2401],{"__ignoreMap":72},[76,2345,2346,2348,2350,2352,2354,2356],{"class":78,"line":79},[76,2347,2255],{"class":98},[76,2349,1187],{"class":1186},[76,2351,1220],{"class":98},[76,2353,125],{"class":272},[76,2355,2241],{"class":1190},[76,2357,2358],{"class":272},"(\n",[76,2360,2361,2364,2367,2369],{"class":78,"line":109},[76,2362,2363],{"class":90},"    \"",[76,2365,2366],{"class":94},"T4N",[76,2368,102],{"class":90},[76,2370,327],{"class":272},[76,2372,2373,2376,2378,2380],{"class":78,"line":312},[76,2374,2375],{"class":1197},"    limit",[76,2377,1187],{"class":1186},[76,2379,2282],{"class":386},[76,2381,327],{"class":272},[76,2383,2384,2387,2389,2391,2393,2395,2397,2399],{"class":78,"line":330},[76,2385,2386],{"class":1197},"    proximity",[76,2388,1187],{"class":1186},[76,2390,1194],{"class":272},[76,2392,2122],{"class":1186},[76,2394,2125],{"class":386},[76,2396,360],{"class":272},[76,2398,2130],{"class":386},[76,2400,1210],{"class":272},[76,2402,2403],{"class":78,"line":392},[76,2404,1210],{"class":272},[19,2406,1799],{"id":2407},"batch-conversion",[10,2409,2410],{},"Convert up to 100 PLSS descriptions in a single request:",[67,2412,2414],{"className":1154,"code":2413,"language":1156,"meta":72,"style":72},"locations = [\n    \"NENE 12 4N 5E Indian Meridian\",\n    \"NESW 25 5N 30E Mount Diablo Meridian\",\n    \"SWNE 22 3N 7E Montana Meridian\",\n]\n\nresults = client.batch_search(locations)\nfor fc in results:\n    feature = fc.features[0]\n    print(feature.properties.descriptor, feature.geometry.coordinates[0][0][:2])\n",[14,2415,2416,2426,2436,2447,2458,2462,2466,2487,2501,2521],{"__ignoreMap":72},[76,2417,2418,2421,2423],{"class":78,"line":79},[76,2419,2420],{"class":98},"locations ",[76,2422,1187],{"class":1186},[76,2424,2425],{"class":272}," [\n",[76,2427,2428,2430,2432,2434],{"class":78,"line":109},[76,2429,2363],{"class":90},[76,2431,1232],{"class":94},[76,2433,102],{"class":90},[76,2435,327],{"class":272},[76,2437,2438,2440,2443,2445],{"class":78,"line":312},[76,2439,2363],{"class":90},[76,2441,2442],{"class":94},"NESW 25 5N 30E Mount Diablo Meridian",[76,2444,102],{"class":90},[76,2446,327],{"class":272},[76,2448,2449,2451,2454,2456],{"class":78,"line":330},[76,2450,2363],{"class":90},[76,2452,2453],{"class":94},"SWNE 22 3N 7E Montana Meridian",[76,2455,102],{"class":90},[76,2457,327],{"class":272},[76,2459,2460],{"class":78,"line":392},[76,2461,2038],{"class":272},[76,2463,2464],{"class":78,"line":454},[76,2465,1178],{"emptyLinePlaceholder":722},[76,2467,2468,2471,2473,2475,2477,2480,2482,2485],{"class":78,"line":2019},[76,2469,2470],{"class":98},"results ",[76,2472,1187],{"class":1186},[76,2474,1220],{"class":98},[76,2476,125],{"class":272},[76,2478,2479],{"class":1190},"batch_search",[76,2481,1194],{"class":272},[76,2483,2484],{"class":1190},"locations",[76,2486,1210],{"class":272},[76,2488,2489,2491,2494,2496,2499],{"class":78,"line":2041},[76,2490,2289],{"class":1163},[76,2492,2493],{"class":98}," fc ",[76,2495,2295],{"class":1163},[76,2497,2498],{"class":98}," results",[76,2500,2306],{"class":272},[76,2502,2503,2506,2508,2511,2513,2515,2517,2519],{"class":78,"line":2061},[76,2504,2505],{"class":98},"    feature ",[76,2507,1187],{"class":1186},[76,2509,2510],{"class":98}," fc",[76,2512,125],{"class":272},[76,2514,1253],{"class":1252},[76,2516,1256],{"class":272},[76,2518,1259],{"class":386},[76,2520,2038],{"class":272},[76,2522,2524,2526,2528,2530,2532,2534,2536,2538,2540,2543,2545,2547,2549,2551,2553,2555,2558,2560,2563,2566],{"class":78,"line":2523},10,[76,2525,2311],{"class":1241},[76,2527,1194],{"class":272},[76,2529,2048],{"class":1190},[76,2531,125],{"class":272},[76,2533,1265],{"class":1252},[76,2535,125],{"class":272},[76,2537,2171],{"class":1252},[76,2539,360],{"class":272},[76,2541,2542],{"class":1190}," feature",[76,2544,125],{"class":272},[76,2546,2072],{"class":1252},[76,2548,125],{"class":272},[76,2550,2077],{"class":1252},[76,2552,1256],{"class":272},[76,2554,1259],{"class":386},[76,2556,2557],{"class":272},"][",[76,2559,1259],{"class":386},[76,2561,2562],{"class":272},"][:",[76,2564,2565],{"class":386},"2",[76,2567,1990],{"class":272},[10,2569,2570],{},"Batch reverse geocoding works the same way:",[67,2572,2574],{"className":1154,"code":2573,"language":1156,"meta":72,"style":72},"coordinates = [(-97.5, 36.1), (-110.0, 45.5), (-104.8, 39.7)]\nresults = client.batch_reverse(coordinates, unit=\"Section\")\n",[14,2575,2576,2627],{"__ignoreMap":72},[76,2577,2578,2581,2583,2586,2588,2590,2592,2594,2597,2600,2602,2605,2607,2610,2612,2614,2616,2619,2621,2624],{"class":78,"line":79},[76,2579,2580],{"class":98},"coordinates ",[76,2582,1187],{"class":1186},[76,2584,2585],{"class":272}," [(",[76,2587,2122],{"class":1186},[76,2589,2125],{"class":386},[76,2591,360],{"class":272},[76,2593,2130],{"class":386},[76,2595,2596],{"class":272},"),",[76,2598,2599],{"class":272}," (",[76,2601,2122],{"class":1186},[76,2603,2604],{"class":386},"110.0",[76,2606,360],{"class":272},[76,2608,2609],{"class":386}," 45.5",[76,2611,2596],{"class":272},[76,2613,2599],{"class":272},[76,2615,2122],{"class":1186},[76,2617,2618],{"class":386},"104.8",[76,2620,360],{"class":272},[76,2622,2623],{"class":386}," 39.7",[76,2625,2626],{"class":272},")]\n",[76,2628,2629,2631,2633,2635,2637,2640,2642,2644,2646,2648,2650,2652,2654,2656],{"class":78,"line":109},[76,2630,2470],{"class":98},[76,2632,1187],{"class":1186},[76,2634,1220],{"class":98},[76,2636,125],{"class":272},[76,2638,2639],{"class":1190},"batch_reverse",[76,2641,1194],{"class":272},[76,2643,2077],{"class":1190},[76,2645,360],{"class":272},[76,2647,2227],{"class":1197},[76,2649,1187],{"class":1186},[76,2651,102],{"class":90},[76,2653,1706],{"class":94},[76,2655,102],{"class":90},[76,2657,1210],{"class":272},[19,2659,2661],{"id":2660},"error-handling","Error handling",[10,2663,2664],{},"The SDK raises typed exceptions mapped to HTTP status codes:",[67,2666,2668],{"className":1154,"code":2667,"language":1156,"meta":72,"style":72},"from townshipamerica.exceptions import (\n    AuthenticationError,\n    NotFoundError,\n    RateLimitError,\n    ValidationError,\n)\n\ntry:\n    result = client.search(\"invalid input\")\nexcept ValidationError as e:\n    print(f\"Bad input: {e}\")\nexcept AuthenticationError:\n    print(\"Check your API key\")\nexcept RateLimitError as e:\n    print(f\"Rate limited — retry after {e.retry_after} seconds\")\nexcept NotFoundError:\n    print(\"No PLSS data at that location\")\n",[14,2669,2670,2687,2694,2701,2708,2715,2719,2723,2730,2754,2770,2796,2806,2822,2836,2864,2874],{"__ignoreMap":72},[76,2671,2672,2674,2677,2679,2682,2684],{"class":78,"line":79},[76,2673,1164],{"class":1163},[76,2675,2676],{"class":98}," townshipamerica",[76,2678,125],{"class":272},[76,2680,2681],{"class":98},"exceptions ",[76,2683,1170],{"class":1163},[76,2685,2686],{"class":272}," (\n",[76,2688,2689,2692],{"class":78,"line":109},[76,2690,2691],{"class":98},"    AuthenticationError",[76,2693,327],{"class":272},[76,2695,2696,2699],{"class":78,"line":312},[76,2697,2698],{"class":98},"    NotFoundError",[76,2700,327],{"class":272},[76,2702,2703,2706],{"class":78,"line":330},[76,2704,2705],{"class":98},"    RateLimitError",[76,2707,327],{"class":272},[76,2709,2710,2713],{"class":78,"line":392},[76,2711,2712],{"class":98},"    ValidationError",[76,2714,327],{"class":272},[76,2716,2717],{"class":78,"line":454},[76,2718,1210],{"class":272},[76,2720,2721],{"class":78,"line":2019},[76,2722,1178],{"emptyLinePlaceholder":722},[76,2724,2725,2728],{"class":78,"line":2041},[76,2726,2727],{"class":1163},"try",[76,2729,2306],{"class":272},[76,2731,2732,2735,2737,2739,2741,2743,2745,2747,2750,2752],{"class":78,"line":2061},[76,2733,2734],{"class":98},"    result ",[76,2736,1187],{"class":1186},[76,2738,1220],{"class":98},[76,2740,125],{"class":272},[76,2742,1225],{"class":1190},[76,2744,1194],{"class":272},[76,2746,102],{"class":90},[76,2748,2749],{"class":94},"invalid input",[76,2751,102],{"class":90},[76,2753,1210],{"class":272},[76,2755,2756,2759,2762,2765,2768],{"class":78,"line":2523},[76,2757,2758],{"class":1163},"except",[76,2760,2761],{"class":98}," ValidationError ",[76,2763,2764],{"class":1163},"as",[76,2766,2767],{"class":98}," e",[76,2769,2306],{"class":272},[76,2771,2773,2775,2777,2780,2783,2786,2789,2792,2794],{"class":78,"line":2772},11,[76,2774,2311],{"class":1241},[76,2776,1194],{"class":272},[76,2778,2779],{"class":1914},"f",[76,2781,2782],{"class":94},"\"Bad input: ",[76,2784,2785],{"class":386},"{",[76,2787,2788],{"class":1190},"e",[76,2790,2791],{"class":386},"}",[76,2793,102],{"class":94},[76,2795,1210],{"class":272},[76,2797,2799,2801,2804],{"class":78,"line":2798},12,[76,2800,2758],{"class":1163},[76,2802,2803],{"class":98}," AuthenticationError",[76,2805,2306],{"class":272},[76,2807,2809,2811,2813,2815,2818,2820],{"class":78,"line":2808},13,[76,2810,2311],{"class":1241},[76,2812,1194],{"class":272},[76,2814,102],{"class":90},[76,2816,2817],{"class":94},"Check your API key",[76,2819,102],{"class":90},[76,2821,1210],{"class":272},[76,2823,2825,2827,2830,2832,2834],{"class":78,"line":2824},14,[76,2826,2758],{"class":1163},[76,2828,2829],{"class":98}," RateLimitError ",[76,2831,2764],{"class":1163},[76,2833,2767],{"class":98},[76,2835,2306],{"class":272},[76,2837,2839,2841,2843,2845,2848,2850,2852,2854,2857,2859,2862],{"class":78,"line":2838},15,[76,2840,2311],{"class":1241},[76,2842,1194],{"class":272},[76,2844,2779],{"class":1914},[76,2846,2847],{"class":94},"\"Rate limited — retry after ",[76,2849,2785],{"class":386},[76,2851,2788],{"class":1190},[76,2853,125],{"class":272},[76,2855,2856],{"class":1252},"retry_after",[76,2858,2791],{"class":386},[76,2860,2861],{"class":94}," seconds\"",[76,2863,1210],{"class":272},[76,2865,2867,2869,2872],{"class":78,"line":2866},16,[76,2868,2758],{"class":1163},[76,2870,2871],{"class":98}," NotFoundError",[76,2873,2306],{"class":272},[76,2875,2877,2879,2881,2883,2886,2888],{"class":78,"line":2876},17,[76,2878,2311],{"class":1241},[76,2880,1194],{"class":272},[76,2882,102],{"class":90},[76,2884,2885],{"class":94},"No PLSS data at that location",[76,2887,102],{"class":90},[76,2889,1210],{"class":272},[19,2891,2893],{"id":2892},"context-manager","Context manager",[10,2895,2896,2897,2900],{},"The client supports ",[14,2898,2899],{},"with"," statements for automatic cleanup:",[67,2902,2904],{"className":1154,"code":2903,"language":1156,"meta":72,"style":72},"with TownshipAmerica(api_key=os.environ[\"TOWNSHIPAMERICA_API_KEY\"]) as client:\n    result = client.search(\"NENE 12 4N 5E Indian Meridian\")\n    print(result.features[0].properties)\n# Connection closed automatically\n",[14,2905,2906,2942,2964,2986],{"__ignoreMap":72},[76,2907,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2928,2930,2932,2935,2938,2940],{"class":78,"line":79},[76,2909,2899],{"class":1163},[76,2911,1191],{"class":1190},[76,2913,1194],{"class":272},[76,2915,1198],{"class":1197},[76,2917,1187],{"class":1186},[76,2919,1973],{"class":1190},[76,2921,125],{"class":272},[76,2923,1978],{"class":1252},[76,2925,1256],{"class":272},[76,2927,102],{"class":90},[76,2929,1985],{"class":94},[76,2931,102],{"class":90},[76,2933,2934],{"class":272},"])",[76,2936,2937],{"class":1163}," as",[76,2939,1220],{"class":98},[76,2941,2306],{"class":272},[76,2943,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962],{"class":78,"line":109},[76,2945,2734],{"class":98},[76,2947,1187],{"class":1186},[76,2949,1220],{"class":98},[76,2951,125],{"class":272},[76,2953,1225],{"class":1190},[76,2955,1194],{"class":272},[76,2957,102],{"class":90},[76,2959,1232],{"class":94},[76,2961,102],{"class":90},[76,2963,1210],{"class":272},[76,2965,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984],{"class":78,"line":312},[76,2967,2311],{"class":1241},[76,2969,1194],{"class":272},[76,2971,1247],{"class":1190},[76,2973,125],{"class":272},[76,2975,1253],{"class":1252},[76,2977,1256],{"class":272},[76,2979,1259],{"class":386},[76,2981,1262],{"class":272},[76,2983,1265],{"class":1252},[76,2985,1210],{"class":272},[76,2987,2988],{"class":78,"line":330},[76,2989,2990],{"class":2057},"# Connection closed automatically\n",[19,2992,1315],{"id":669},[138,2994,2995,3001,3007],{},[30,2996,2997,3000],{},[676,2998,2999],{"href":1278},"Python SDK Async & GeoPandas Patterns"," - Async workflows, GeoPandas integration, and production patterns",[30,3002,3003,3006],{},[676,3004,3005],{"href":678},"API Integration Guide"," - REST API endpoints, pricing, and integration patterns",[30,3008,3009,1342],{},[676,3010,1341],{"href":1340},[10,3012,3013,3014,3016,3017,125],{},"Need help? ",[676,3015,694],{"href":693}," or open an issue on ",[676,3018,3021],{"href":3019,"rel":3020},"https:\u002F\u002Fgithub.com\u002Fmepa1363\u002Ftownshipamerica-web\u002Fissues",[1299],"GitHub",[696,3023,3024],{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}",{"title":72,"searchDepth":109,"depth":109,"links":3026},[3027,3028,3033,3034,3035,3036,3037,3038],{"id":1853,"depth":109,"text":1854},{"id":1883,"depth":109,"text":1884,"children":3029},[3030,3031,3032],{"id":752,"depth":312,"text":753},{"id":1900,"depth":312,"text":1901},{"id":1929,"depth":312,"text":1930},{"id":2095,"depth":109,"text":2096},{"id":2241,"depth":109,"text":2242},{"id":2407,"depth":109,"text":1799},{"id":2660,"depth":109,"text":2661},{"id":2892,"depth":109,"text":2893},{"id":669,"depth":109,"text":1315},"Install the townshipamerica Python package and convert PLSS legal land descriptions to GPS coordinates in four lines of code. Typed responses, sync and async clients.","i-lucide-terminal",{},{"title":1841,"description":3039},"guides\u002Fpython-sdk","pYFB5zyw_PgAylATNjsk1zWojezvE8suKc6YbWGD1gE"]