Build amazing apps with our API
Use our API to build fast and reliable apps across different platforms.
Township Canada API
Township Canada provides API endpoints designed for seamless integration of legal land description lookups and grid map visualizations into your applications. These APIs are compatible with the DLS grid system across the Prairies (Alberta, Saskatchewan, Manitoba) and BC's Peace River Region, as well as the NTS grid for British Columbia and Geographic Townships in Ontario.
Simple pricing, flexible plans
Township Canada offers a simple and flexible pricing model for our API offerings, including Search, Autocomplete, Batch, and Maps. You can choose from three different tiers to fit your requirements. Each tier comes with a limit on concurrent requests and a monthly quota for total API calls. You can choose to pay monthly or annually, and cancel at any time.
Get started quickly with our APIs by following our quick-start guides. These guides provide step-by-step instructions and examples to help you get up and running with our APIs in no time.
If your project requires a customized API or a higher usage limit, don't hesitate to reach out to us . We're here to collaborate and provision the perfect API solution to suit your specific needs.
Search
Geocode, quickly and accurately.
$10/month
Get started today- Access a complete database covering AB, BC, SK, MB, and ON.
- Query townships, sections, quarter sections, LSDs, and more.
- 1 request per second.
- 1,000 requests per month.
Autocomplete
Geocode with smart suggestions.
$10/month
Get started today- Access a complete database covering AB, BC, SK, MB, and ON.
- Query townships, sections, quarter sections, LSDs, and more.
- 1 request per second.
- 1,000 requests per month.
Batch
Geocode large datasets efficiently.
$20/month
Get started today- Access a complete database covering AB, BC, SK, MB, and ON.
- Query townships, sections, quarter sections, LSDs, and more.
- 100 records per request.
- 1 request per second.
- 1,000 requests per month.
Maps
Display legal survey grids in your app.
$10/month
Get started today- Access a complete database covering AB, BC, SK, MB, and ON.
- Display ownships, sections, quarter sections, LSDs, and more.
- Deliver maps using our fast, smooth, and customizable vector tiles.
- Unlimited requests per second.
- 10,000 requests per month.
How to use the Search API
Using the Search API, you can convert legal land descriptions to geographic coordinates. You can also find the legal land location associated with a pair of longitude and latitude. The API accepts input parameters as query strings and returns a GeoJSON response in return.
Convert legal land description to geographic coordinates (longitude and latitude)
- Base URL:
https://developer.townshipcanada.com
- Endpoint:
GET /search/legal-location
- Parameters:
- location (required):
1-2-23-22-W4
- location (required):
- Authentication (Header):
X-API-Key: 1234567890abcdefghij
- Response:
GeoJSON FeatureCollection
, which includes the legal land location block and its center point.
Curl
JavaScript
Python
API Response
Convert geographic coordinates (longitude and latitude) to legal land description
- Base URL:
https://developer.townshipcanada.com
- Endpoint:
GET /search/coordinates
- Parameters:
- location (required):
-98.2314,52.23424
- survey_system (optional):
DLS
This is an optional parameter, providing results from different survey systems. Allowed inputs are
DLS
,NTS
,River Lot
, andGeographic Township
. In case you do not specify the unit, the API will return the survey system of the smallest grid block that contains the input coordinates. - unit (optional):
Section
This is an optional parameter, providing grids with different resolutions. Allowed inputs are
Township
,Section
,Quarter Section
, andLSD
for DLS;Quarter Unit
for BC NTS;River/Parish Lot
for Manitoba's River Lots;Lot
andConcession
for Ontario's Geographic Townships; andall
, which returns all the grid blocks that contain the input coordinates. In case you do not specify the unit, the API will return the smallest grid block that contains the input coordinates.
- location (required):
- Authentication (Header):
X-API-Key: 1234567890abcdefghij
- Response:
GeoJSON FeatureCollection
, which includes the legal land location block and its center point.
Curl
JavaScript
Python
API Response
How to use the Autocomplete API
Using the Autocomplete API, you can search for legal land descriptions using partial or full text and get up to 10 results that matched the input in return. The result includes the input search term, the matched legal land description, and their associated geographic coordinates. The API accepts input parameters as query strings and returns a GeoJSON response in return.
Note that you can only use the Autocomplete API to convert legal land descriptions to geographic coordinates. Use the Search API to convert geographic coordinates to legal land descriptions.
- Base URL:
https://developer.townshipcanada.com
- Endpoint:
GET /autocomplete/legal-location
- Parameters:
- location (required):
NW-2
- limit (optional):
5
This is an optional parameter, specifying the maximum number of results to return. The default is 3 and the maximum supported is 10.
- proximity (optional):
-114.12435,51.0243
This is an optional parameter, biasing the response to favor results that are closer to the specified coordinates. Allowed values are
longitude,latitude
andlatitude,longitude
.
- location (required):
- Authentication (Header):
X-API-Key: 1234567890abcdefghij
- Response:
GeoJSON FeatureCollection
, which includes the matched legal land descriptions and their center points.
Curl
JavaScript
Python
API Response
How to use the Batch API
Using the Batch API, you can convert legal land descriptions to geographic coordinates and vice versa, much like our Search API. However, what sets the Batch API apart is its ability to process up to 100 records in a single API call. The API accepts the input parameters as a JSON object using HTTP POST and returns a GeoJSON response in return.
Convert legal land description to geographic coordinates (longitude and latitude)
- Base URL:
https://developer.townshipcanada.com
- Endpoint:
POST /batch/legal-location
- Message Body (JSON):
["NE-7-102-19-W4","1-24-60-1-W5","7-66-4-W6"]
- Authentication (Header):
X-API-Key: 1234567890abcdefghij
- Response:
GeoJSON FeatureCollection
, which includes the legal land location blocks and their center points.
Curl
JavaScript
Python
API Response
Convert to geographic coordinates (longitude and latitude) to legal land description
- Base URL:
https://developer.townshipcanada.com
- Endpoint:
POST /batch/coordinates
- Message Body (JSON):
{"coordinates":[[-110.086743843,54.28602155], [-110.011880321,54.336941143], [-110.074171308,54.336931111]], "survey_system":"DLS","unit":"Quarter Section"}
survey_system
is an optional parameter, providing results from different survey systems. Allowed inputs areDLS
,NTS
,River Lot
, andGeographic Township
. In case you do not specify the unit, the API will return the survey system of the smallest grid block that contains the input coordinates.unit
is also an optional parameter, providing grids with different resolutions. Allowed inputs areTownship
,Section
,Quarter Section
, andLSD
for DLS;Quarter Unit
for BC NTS;River/Parish Lot
for Manitoba's River Lots;Lot
andConcession
for Ontario's Geographic Townships; andall
, which returns all the grid blocks that contain the input coordinates. In case you do not specify the unit, the API will return the smallest grid block that contains the input coordinates. - Authentication (Header):
X-API-Key: 1234567890abcdefghij
- Response:
GeoJSON FeatureCollection
, which includes the legal land location block and its center point.
Curl
JavaScript
Python
API Response
How to use the Maps API
The Maps API allows you to display legal survey grids on maps for both web and mobile applications by serving geospatial data in the vector tiles format. You can render these vector tiles using various web mapping libraries, including Mapbox GL JS, OpenLayers, and Leaflet. See here for a complete example.
Each grid block (e.g., Township, Section, LSD, etc.) is represented by two vector tile layers: one for the grid and another for labels. The grid tile layer contains the geometries of the block, showing boundaries, while the label tile layer displays names and other properties. For instance, the Township grid tile for Alberta is accessible at: https://maps.townshipcanada.com/ab/twp/{z}/{x}/{y}.mvt?api_key=...
. The corresponding label tile for the same block is available at: https://maps.townshipcanada.com/ab/twp-label/{z}/{x}/{y}.mvt?api_key=...
.
Each vector tile layer is documented in a metadata file, which provides details such as the tile URL, source layer, supported zoom levels, and properties. For example, the metadata URL for the Alberta Township grid is: https://maps.townshipcanada.com/ab/twp.json?api_key=...
, and the metadata URL for the Alberta Township label is: https://maps.townshipcanada.com/ab/twp-label.json?api_key=...
. The metadata document for the Alberta Township label contains the following information:
These metadata files include information necessary for integrating and utilizing the vector tiles effectively within your applications.
The DLS grid
The Maps API offers the DLS grid in four different resolutions for Alberta, Saskatchewan, Manitoba, and BC's Peace River Region: Township (twp
), Section (sec
), Quarter Section (qtr
), and LSD (lsd
). For each block, there are two vector tile sources: one for the grid and another for the labels. For instance, here is the tile URL for displaying Alberta's township block and its corresponding label.
Mapbox GL JS
Note that you can substitute ab
with bc
, sk
, or mb
to visualize the grid map for British Columbia, Saskatchewan, or Manitoba. Additionally, you can replace twp
with sec
, qtr
, or lsd
to display section, quarter section, or LSD blocks. Similarly, you can exchange twp-label
with sec-label
, qtr-label
, or lsd-label
to visualize labels for section, quarter section, or LSD blocks.
Use the table below to display and label the grid layers for Township, Section, Quarter Section, and LSD blocks on the map.
Grid type | Region | Tile URL | Source layer | Zoom level | Properties |
---|---|---|---|---|---|
Township | Alberta | https://maps.townshipcanada.com/ab/twp/{z}/{x}/{y}.mvt?api_key=... | ab_twp | 0 - 14 | id |
Township | British Columbia | https://maps.townshipcanada.com/bc/twp/{z}/{x}/{y}.mvt?api_key=... | bc_twp | 0 - 14 | id |
Township | Saskatchewan | https://maps.townshipcanada.com/sk/twp/{z}/{x}/{y}.mvt?api_key=... | sk_twp | 0 - 14 | id |
Township | Manitoba | https://maps.townshipcanada.com/mb/twp/{z}/{x}/{y}.mvt?api_key=... | mb_twp | 0 - 14 | id |
Section | Alberta | https://maps.townshipcanada.com/ab/sec/{z}/{x}/{y}.mvt?api_key=... | ab_sec | 9 - 14 | id |
Section | British Columbia | https://maps.townshipcanada.com/bc/sec/{z}/{x}/{y}.mvt?api_key=... | bc_sec | 9 - 14 | id |
Section | Saskatchewan | https://maps.townshipcanada.com/sk/sec/{z}/{x}/{y}.mvt?api_key=... | sk_sec | 9 - 14 | id |
Section | Manitoba | https://maps.townshipcanada.com/mb/sec/{z}/{x}/{y}.mvt?api_key=... | mb_sec | 9 - 14 | id |
Quarter Section | Alberta | https://maps.townshipcanada.com/ab/qtr/{z}/{x}/{y}.mvt?api_key=... | ab_qtr | 9 - 14 | id |
Quarter Section | British Columbia | https://maps.townshipcanada.com/bc/qtr/{z}/{x}/{y}.mvt?api_key=... | bc_qtr | 9 - 14 | id |
Quarter Section | Saskatchewan | https://maps.townshipcanada.com/sk/qtr/{z}/{x}/{y}.mvt?api_key=... | sk_qtr | 9 - 14 | id |
Quarter Section | Manitoba | https://maps.townshipcanada.com/mb/qtr/{z}/{x}/{y}.mvt?api_key=... | mb_qtr | 9 - 14 | id |
LSD | Alberta | https://maps.townshipcanada.com/ab/lsd/{z}/{x}/{y}.mvt?api_key=... | ab_lsd | 9 - 14 | id |
LSD | British Columbia | https://maps.townshipcanada.com/bc/lsd/{z}/{x}/{y}.mvt?api_key=... | bc_lsd | 9 - 14 | id |
LSD | Saskatchewan | https://maps.townshipcanada.com/sk/lsd/{z}/{x}/{y}.mvt?api_key=... | sk_lsd | 9 - 14 | id |
LSD | Manitoba | https://maps.townshipcanada.com/mb/lsd/{z}/{x}/{y}.mvt?api_key=... | mb_lsd | 9 - 14 | id |
Label type | Region | Label tile URL | Source layer | Source zoom level | Properties |
---|---|---|---|---|---|
Township | Alberta | https://maps.townshipcanada.com/ab/twp-label/{z}/{x}/{y}.mvt?api_key=... | ab_twp_label | 0 - 14 | id, descriptor, township, range, meridian |
Township | British Columbia | https://maps.townshipcanada.com/bc/twp-label/{z}/{x}/{y}.mvt?api_key=... | bc_twp_label | 0 - 14 | id, descriptor, township, range, meridian |
Township | Saskatchewan | https://maps.townshipcanada.com/sk/twp-label/{z}/{x}/{y}.mvt?api_key=... | sk_twp_label | 0 - 14 | id, descriptor, township, range, meridian |
Township | Manitoba | https://maps.townshipcanada.com/mb/twp-label/{z}/{x}/{y}.mvt?api_key=... | mb_twp_label | 0 - 14 | id, descriptor, township, range, meridian |
Section | Alberta | https://maps.townshipcanada.com/ab/sec-label/{z}/{x}/{y}.mvt?api_key=... | ab_sec_label | 9 - 14 | id, descriptor, section, township, range, meridian |
Section | British Columbia | https://maps.townshipcanada.com/bc/sec-label/{z}/{x}/{y}.mvt?api_key=... | bc_sec_label | 9 - 14 | id, descriptor, section, township, range, meridian |
Section | Saskatchewan | https://maps.townshipcanada.com/sk/sec-label/{z}/{x}/{y}.mvt?api_key=... | sk_sec_label | 9 - 14 | id, descriptor, section, township, range, meridian |
Section | Manitoba | https://maps.townshipcanada.com/mb/sec-label/{z}/{x}/{y}.mvt?api_key=... | mb_sec_label | 9 - 14 | id, descriptor, quarter_section, section, township, range, meridian |
Quarter Section | Alberta | https://maps.townshipcanada.com/ab/qtr-label/{z}/{x}/{y}.mvt?api_key=... | ab_qtr_label | 9 - 14 | id, descriptor, quarter_section, section, township, range, meridian |
Quarter Section | British Columbia | https://maps.townshipcanada.com/bc/qtr-label/{z}/{x}/{y}.mvt?api_key=... | bc_qtr_label | 9 - 14 | id, descriptor, quarter_section, section, township, range, meridian |
Quarter Section | Saskatchewan | https://maps.townshipcanada.com/sk/qtr-label/{z}/{x}/{y}.mvt?api_key=... | sk_qtr_label | 9 - 14 | id, descriptor, quarter_section, section, township, range, meridian |
Quarter Section | Manitoba | https://maps.townshipcanada.com/mb/qtr-label/{z}/{x}/{y}.mvt?api_key=... | mb_qtr_label | 9 - 14 | id, descriptor, quarter_section, section, township, range, meridian |
LSD | Alberta | https://maps.townshipcanada.com/ab/lsd-label/{z}/{x}/{y}.mvt?api_key=... | ab_lsd_label | 9 - 14 | id, descriptor, lsd, section, township, range, meridian |
LSD | British Columbia | https://maps.townshipcanada.com/bc/lsd-label/{z}/{x}/{y}.mvt?api_key=... | bc_lsd_label | 9 - 14 | id, descriptor, lsd, section, township, range, meridian |
LSD | Saskatchewan | https://maps.townshipcanada.com/sk/lsd-label/{z}/{x}/{y}.mvt?api_key=... | sk_lsd_label | 9 - 14 | id, descriptor, lsd, section, township, range, meridian |
LSD | Manitoba | https://maps.townshipcanada.com/mb/lsd-label/{z}/{x}/{y}.mvt?api_key=... | mb_lsd_label | 9 - 14 | id, descriptor, lsd, section, township, range, meridian |
The NTS grid
The Maps API offers the NTS grid in three different resolutions for British Columbia: Series (series
), Blocks (block
), Units (unit
), and Quarter Units (qtr-unit
). Just like the DSL grid options, there are two vector tile sources available for both the grid maps and their labels. Here is an example of the tile URL for presenting BC's series grid along with its label.
Mapbox GL JS
You have the flexibility to substitute series
with block
, unit
, or qtr-unit
to display block or unit grids. Likewise, you can replace series-label
with block-label
, unit-label
, or qtr-unit-label
to visualize labels for block or unit grids.
Use the table below to display and label the grid layers for Series, Blocks, Units, and Quarter Units on the map.
Grid type | Region | Tile URL | Source layer | Zoom level | Properties |
---|---|---|---|---|---|
Series | British Columbia | https://maps.townshipcanada.com/bc/series/{z}/{x}/{y}.mvt?api_key=... | bc_series | 0 - 14 | id |
Block | British Columbia | https://maps.townshipcanada.com/bc/block/{z}/{x}/{y}.mvt?api_key=... | bc_block | 9 - 14 | id |
Unit | British Columbia | https://maps.townshipcanada.com/bc/unit/{z}/{x}/{y}.mvt?api_key=... | bc_unit | 9 - 14 | id |
Quarter Unit | British Columbia | https://maps.townshipcanada.com/bc/qtr-unit/{z}/{x}/{y}.mvt?api_key=... | bc_qtr_unit | 9 - 14 | id |
Label type | Region | Label tile URL | Source layer | Source zoom level | Properties |
---|---|---|---|---|---|
Series | British Columbia | https://maps.townshipcanada.com/bc/series-label/{z}/{x}/{y}.mvt?api_key=... | bc_series_label | 0 - 14 | id, descriptor, series, area, sheet |
Block | British Columbia | https://maps.townshipcanada.com/bc/block-label/{z}/{x}/{y}.mvt?api_key=... | bc_block_label | 9 - 14 | id, descriptor, block, series, area, sheet |
Unit | British Columbia | https://maps.townshipcanada.com/bc/unit-label/{z}/{x}/{y}.mvt?api_key=... | bc_unit_label | 9 - 14 | id, descriptor, unit, block, series, area, sheet |
Quarter Unit | British Columbia | https://maps.townshipcanada.com/bc/qtr-unit-label/{z}/{x}/{y}.mvt?api_key=... | bc_qtr_unit_label | 9 - 14 | id, descriptor, qtr, unit, block, series, area, sheet |
The Geographic Township grid
The Maps API offers the Geographic Township grid in three distinct resolutions for Ontario: Townships (twp
), Concessions (con
), and Lots (lot
). Each block includes two vector tile sources: one for the grid and another for the label. For instance, here is the tile URL for presenting Ontario's township block along with its corresponding label.
Mapbox GL JS
You can substitute twp
with con
or lot
to visualize the grid for concessions or lots. Likewise, you can replace twp-label
with con-label
or lot-label
to display labels for concessions or lots.
Use the table below to display and label the grid layers for Townships, Concessions, and Lots on the map.
Grid type | Region | Tile URL | Source layer | Zoom level | Properties |
---|---|---|---|---|---|
Township | Ontario | https://maps.townshipcanada.com/on/twp/{z}/{x}/{y}.mvt?api_key=... | on_twp | 0 - 14 | id |
Concession | Ontario | https://maps.townshipcanada.com/on/con/{z}/{x}/{y}.mvt?api_key=... | on_con | 9 - 14 | id |
Lot | Ontario | https://maps.townshipcanada.com/on/lot/{z}/{x}/{y}.mvt?api_key=... | on_lot | 9 - 14 | id |
Label type | Region | Label tile URL | Source layer | Source zoom level | Properties |
---|---|---|---|---|---|
Township | Ontario | https://maps.townshipcanada.com/on/twp-label/{z}/{x}/{y}.mvt?api_key=... | on_twp_label | 0 - 14 | id, descriptor |
Concession | Ontario | https://maps.townshipcanada.com/on/con-label/{z}/{x}/{y}.mvt?api_key=... | on_con_label | 9 - 14 | id, descriptor, concession, twp |
Lot | Ontario | https://maps.townshipcanada.com/on/lot-label/{z}/{x}/{y}.mvt?api_key=... | on_lot_label | 9 - 14 | id, descriptor, lot, concession, twp |
Here is an example that displays the DLS and NTS grids for British Columbia, Alberta, Saskatchewan, and Manitoba, plus the Geographic Townships for Ontario, similar to the grid map you see on townshipcanada.com. Give it a try and let us know if you have any questions. Happy coding!