[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-\u002Fblog\u002Funlimited-api-keys":3},{"id":4,"title":5,"body":6,"cover":208,"date":209,"description":210,"extension":211,"meta":212,"navigation":215,"path":216,"seo":217,"stem":218,"tags":219,"__hash__":223},"blog\u002Fblog\u002Funlimited-api-keys.md","Unlimited API Keys — Separate Dev, Staging, and Production",{"type":7,"value":8,"toc":198},"minimark",[9,13,16,21,24,47,50,54,63,70,73,77,80,86,92,103,109,113,121,152,160,164,172,176],[10,11,12],"p",{},"You're building an internal tool that converts legal land descriptions using Township Canada's API. You've been developing locally with the same API key that runs in production. It works — until your staging environment runs a batch test that burns through your monthly quota, or until a developer accidentally commits the key to a public repository and you have to regenerate it. Regenerating breaks production immediately because both environments use the same key.",[10,14,15],{},"This is the kind of problem a single API key creates. The new Township Canada gives you unlimited keys.",[17,18,20],"h2",{"id":19},"one-key-per-environment","One Key Per Environment",[10,22,23],{},"With unlimited API keys, you create a separate key for each environment in your stack:",[25,26,27,35,41],"ul",{},[28,29,30,34],"li",{},[31,32,33],"strong",{},"Development"," — A key for local development that you can reset freely without affecting anything else",[28,36,37,40],{},[31,38,39],{},"Staging"," — A key for your test environment, where integration tests can run batch conversions without touching production quotas",[28,42,43,46],{},[31,44,45],{},"Production"," — Your live key, protected and monitored, used only by your deployed application",[10,48,49],{},"If a key is compromised, you revoke that one key. Your other environments keep running.",[17,51,53],{"id":52},"how-it-works","How It Works",[10,55,56,57,62],{},"Open your ",[58,59,61],"a",{"href":60},"\u002Fguides\u002Faccount-management","account settings"," and go to the API keys section. Create a new key, give it a name like \"Production — Well Mapper App\" or \"Dev — Local Testing\", and copy the key into your environment variables. Each key shows its creation date and last-used timestamp, so you can see at a glance which keys are active and which haven't been used in months.",[10,64,65],{},[66,67],"img",{"alt":68,"src":69},"API key management interface","\u002Fimages\u002Fblog\u002Funlimited-api-keys\u002Fkey-management.webp",[10,71,72],{},"Keys are created instantly. There's no approval process, no waiting period, and no limit on how many you can create. Need a key for a quick prototype? Create one, test your idea, delete the key when you're done.",[17,74,76],{"id":75},"key-management-best-practices","Key Management Best Practices",[10,78,79],{},"A few patterns that work well for teams building on the Township Canada API:",[10,81,82,85],{},[31,83,84],{},"Name keys descriptively."," \"Key 1\" and \"Key 2\" tell you nothing six months from now. \"Production — Pipeline Tracker v2\" and \"Staging — Pipeline Tracker v2\" make it obvious which key is which.",[10,87,88,91],{},[31,89,90],{},"Rotate keys periodically."," Create a new production key, update your deployment, confirm it works, then revoke the old key. This limits the window of exposure if a key was ever leaked.",[10,93,94,97,98,102],{},[31,95,96],{},"Use environment variables."," Never hardcode API keys in source code. Store them in ",[99,100,101],"code",{},".env"," files (excluded from version control), CI\u002FCD secrets, or your cloud provider's secret manager.",[10,104,105,108],{},[31,106,107],{},"Delete unused keys."," If a project is decommissioned or a developer leaves the team, revoke their keys. Fewer active keys means a smaller surface area to monitor.",[17,110,112],{"id":111},"what-you-can-build","What You Can Build",[10,114,115,116,120],{},"The ",[58,117,119],{"href":118},"\u002Fapi","Township Canada API"," includes four main endpoints:",[25,122,123,134,140,146],{},[28,124,125,128,129,133],{},[31,126,127],{},"Search API"," — Convert a single ",[58,130,132],{"href":131},"\u002Fabout","legal land description"," to GPS coordinates, or reverse-geocode coordinates to a legal land description",[28,135,136,139],{},[31,137,138],{},"Autocomplete API"," — Get real-time suggestions as users type legal land descriptions or place names",[28,141,142,145],{},[31,143,144],{},"Batch API"," — Submit hundreds or thousands of legal land descriptions and get coordinates back in bulk",[28,147,148,151],{},[31,149,150],{},"Maps API"," — Access vector tile layers for Canadian survey grids (township, section, quarter section, LSD) to display on Mapbox, MapLibre, OpenLayers, or other mapping libraries",[10,153,154,155,159],{},"Each key works across all endpoints. There's no per-endpoint key restriction. For a walkthrough of what each endpoint does and who uses it, see ",[58,156,158],{"href":157},"\u002Fblog\u002Fbuilding-with-canadian-land-data-api","Building with Canadian Land Data",".",[17,161,163],{"id":162},"for-teams","For Teams",[10,165,166,167,171],{},"On Business plans with ",[58,168,170],{"href":169},"\u002Fguides\u002Fteams","team management",", API keys are visible to team administrators. A team lead can see all keys created by team members, monitor usage, and revoke keys if needed. This gives organizations control over how their API access is managed without requiring every developer to share credentials.",[17,173,175],{"id":174},"getting-started","Getting Started",[10,177,178,179,181,182,186,187,194,195,159],{},"API keys are available on all paid plans. Create your first key in your ",[58,180,61],{"href":60},", and follow the ",[58,183,185],{"href":184},"\u002Fguides\u002Fapi-integration","API integration guide"," to make your first call. If you're building in TypeScript, the ",[58,188,190,193],{"href":189},"\u002Fblog\u002Ftownshipcanada-sdk-typescript-npm-package",[99,191,192],{},"townshipcanada"," npm package"," takes your API key in the constructor and handles the rest. Full API reference and code examples are on the ",[58,196,197],{"href":118},"API documentation page",{"title":199,"searchDepth":200,"depth":200,"links":201},"",2,[202,203,204,205,206,207],{"id":19,"depth":200,"text":20},{"id":52,"depth":200,"text":53},{"id":75,"depth":200,"text":76},{"id":111,"depth":200,"text":112},{"id":162,"depth":200,"text":163},{"id":174,"depth":200,"text":175},"https:\u002F\u002Fb9bukyyl5yuyveqq.public.blob.vercel-storage.com\u002Fimages\u002Fblog\u002F2026-03\u002Fd59d74f9-102b-4c0c-bc0d-30583f2e4898.webp","2026-03-20","Create multiple API keys for different environments and applications. Name them, monitor usage, and revoke them individually.","md",{"category":213,"author":214},"announcement","Township Canada",true,"\u002Fblog\u002Funlimited-api-keys",{"title":5,"description":210},"blog\u002Funlimited-api-keys",[220,221,222],"Announcement","API","Developer","MurHr3YL1uyBjIK5kDpx5mMlIqmsGTG-EfwNB1CtOqM"]