Geocoder REST API
gov · Data
This API represents address cleaning, correction, completion, geocoding, reverse geocoding, and proximity resources for intersection addresses, physical addresses and their occupants in British Columbia. Please read our [data collection notice](https://github.com/bcgov/api-specs/blob/master/COLLECTION_NOTICE.md#collection-notice). Please note that you may experience issues when submitting requests to the delivery or test environment if using this [OpenAPI specification](https://github.com/bcg
Authentication
Sample Requests
Represents the set of geocoded and standardized sites and intersections whose address best matches a given query address.
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/addresses.{outputFormat}?bbox=example&echo=true&brief=false¢re=example&setBack=0&minScore=1&siteName=example&outputSRS=4326&localities=example&maxResults=1&streetName=example&streetType=example&unitNumber=example&civicNumber=example&extrapolate=true&maxDistance=1&parcelPoint=example&autoComplete=false&localityName=example&provinceCode=BC&addressString=example&interpolation=adaptive¬Localities=example&matchPrecision=example&unitDesignator=APT&streetDirection=N&streetQualifier=example&unitNumberSuffix=example&civicNumberSuffix=example&matchPrecisionNot=example&locationDescriptor=any"import requests
params = {
"bbox": "example",
"echo": "true",
"brief": "false",
"centre": "example",
"setBack": "0",
"minScore": "1",
"siteName": "example",
"outputSRS": "4326",
"localities": "example",
"maxResults": "1",
"streetName": "example",
"streetType": "example",
"unitNumber": "example",
"civicNumber": "example",
"extrapolate": "true",
"maxDistance": "1",
"parcelPoint": "example",
"autoComplete": "false",
"localityName": "example",
"provinceCode": "BC",
"addressString": "example",
"interpolation": "adaptive",
"notLocalities": "example",
"matchPrecision": "example",
"unitDesignator": "APT",
"streetDirection": "N",
"streetQualifier": "example",
"unitNumberSuffix": "example",
"civicNumberSuffix": "example",
"matchPrecisionNot": "example",
"locationDescriptor": "any"
}
response = requests.get(
"https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/addresses.{outputFormat}",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/addresses.{outputFormat}');
url.searchParams.set('bbox', 'example');
url.searchParams.set('echo', 'true');
url.searchParams.set('brief', 'false');
url.searchParams.set('centre', 'example');
url.searchParams.set('setBack', '0');
url.searchParams.set('minScore', '1');
url.searchParams.set('siteName', 'example');
url.searchParams.set('outputSRS', '4326');
url.searchParams.set('localities', 'example');
url.searchParams.set('maxResults', '1');
url.searchParams.set('streetName', 'example');
url.searchParams.set('streetType', 'example');
url.searchParams.set('unitNumber', 'example');
url.searchParams.set('civicNumber', 'example');
url.searchParams.set('extrapolate', 'true');
url.searchParams.set('maxDistance', '1');
url.searchParams.set('parcelPoint', 'example');
url.searchParams.set('autoComplete', 'false');
url.searchParams.set('localityName', 'example');
url.searchParams.set('provinceCode', 'BC');
url.searchParams.set('addressString', 'example');
url.searchParams.set('interpolation', 'adaptive');
url.searchParams.set('notLocalities', 'example');
url.searchParams.set('matchPrecision', 'example');
url.searchParams.set('unitDesignator', 'APT');
url.searchParams.set('streetDirection', 'N');
url.searchParams.set('streetQualifier', 'example');
url.searchParams.set('unitNumberSuffix', 'example');
url.searchParams.set('civicNumberSuffix', 'example');
url.searchParams.set('matchPrecisionNot', 'example');
url.searchParams.set('locationDescriptor', 'any');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/addresses.{outputFormat}")
q := baseURL.Query()
q.Set("bbox", "example")
q.Set("echo", "true")
q.Set("brief", "false")
q.Set("centre", "example")
q.Set("setBack", "0")
q.Set("minScore", "1")
q.Set("siteName", "example")
q.Set("outputSRS", "4326")
q.Set("localities", "example")
q.Set("maxResults", "1")
q.Set("streetName", "example")
q.Set("streetType", "example")
q.Set("unitNumber", "example")
q.Set("civicNumber", "example")
q.Set("extrapolate", "true")
q.Set("maxDistance", "1")
q.Set("parcelPoint", "example")
q.Set("autoComplete", "false")
q.Set("localityName", "example")
q.Set("provinceCode", "BC")
q.Set("addressString", "example")
q.Set("interpolation", "adaptive")
q.Set("notLocalities", "example")
q.Set("matchPrecision", "example")
q.Set("unitDesignator", "APT")
q.Set("streetDirection", "N")
q.Set("streetQualifier", "example")
q.Set("unitNumberSuffix", "example")
q.Set("civicNumberSuffix", "example")
q.Set("matchPrecisionNot", "example")
q.Set("locationDescriptor", "any")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/addresses.{outputFormat}")
uri.query = URI.encode_www_form({
"bbox" => "example",
"echo" => "true",
"brief" => "false",
"centre" => "example",
"setBack" => "0",
"minScore" => "1",
"siteName" => "example",
"outputSRS" => "4326",
"localities" => "example",
"maxResults" => "1",
"streetName" => "example",
"streetType" => "example",
"unitNumber" => "example",
"civicNumber" => "example",
"extrapolate" => "true",
"maxDistance" => "1",
"parcelPoint" => "example",
"autoComplete" => "false",
"localityName" => "example",
"provinceCode" => "BC",
"addressString" => "example",
"interpolation" => "adaptive",
"notLocalities" => "example",
"matchPrecision" => "example",
"unitDesignator" => "APT",
"streetDirection" => "N",
"streetQualifier" => "example",
"unitNumberSuffix" => "example",
"civicNumberSuffix" => "example",
"matchPrecisionNot" => "example",
"locationDescriptor" => "any"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/addresses.{outputFormat}?" . http_build_query([
"bbox" => "example",
"echo" => "true",
"brief" => "false",
"centre" => "example",
"setBack" => "0",
"minScore" => "1",
"siteName" => "example",
"outputSRS" => "4326",
"localities" => "example",
"maxResults" => "1",
"streetName" => "example",
"streetType" => "example",
"unitNumber" => "example",
"civicNumber" => "example",
"extrapolate" => "true",
"maxDistance" => "1",
"parcelPoint" => "example",
"autoComplete" => "false",
"localityName" => "example",
"provinceCode" => "BC",
"addressString" => "example",
"interpolation" => "adaptive",
"notLocalities" => "example",
"matchPrecision" => "example",
"unitDesignator" => "APT",
"streetDirection" => "N",
"streetQualifier" => "example",
"unitNumberSuffix" => "example",
"civicNumberSuffix" => "example",
"matchPrecisionNot" => "example",
"locationDescriptor" => "any"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Represents intersections near a given point
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/near.{outputFormat}?point=example&maxDegree=100&minDegree=2&outputSRS=4326&maxResults=1&maxDistance=1"import requests
params = {
"point": "example",
"maxDegree": "100",
"minDegree": "2",
"outputSRS": "4326",
"maxResults": "1",
"maxDistance": "1"
}
response = requests.get(
"https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/near.{outputFormat}",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/near.{outputFormat}');
url.searchParams.set('point', 'example');
url.searchParams.set('maxDegree', '100');
url.searchParams.set('minDegree', '2');
url.searchParams.set('outputSRS', '4326');
url.searchParams.set('maxResults', '1');
url.searchParams.set('maxDistance', '1');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/near.{outputFormat}")
q := baseURL.Query()
q.Set("point", "example")
q.Set("maxDegree", "100")
q.Set("minDegree", "2")
q.Set("outputSRS", "4326")
q.Set("maxResults", "1")
q.Set("maxDistance", "1")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/near.{outputFormat}")
uri.query = URI.encode_www_form({
"point" => "example",
"maxDegree" => "100",
"minDegree" => "2",
"outputSRS" => "4326",
"maxResults" => "1",
"maxDistance" => "1"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/near.{outputFormat}?" . http_build_query([
"point" => "example",
"maxDegree" => "100",
"minDegree" => "2",
"outputSRS" => "4326",
"maxResults" => "1",
"maxDistance" => "1"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Represents the closest intersection to a given point
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/nearest.{outputFormat}?point=example&maxDegree=100&minDegree=2&outputSRS=4326&maxDistance=1"import requests
params = {
"point": "example",
"maxDegree": "100",
"minDegree": "2",
"outputSRS": "4326",
"maxDistance": "1"
}
response = requests.get(
"https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/nearest.{outputFormat}",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/nearest.{outputFormat}');
url.searchParams.set('point', 'example');
url.searchParams.set('maxDegree', '100');
url.searchParams.set('minDegree', '2');
url.searchParams.set('outputSRS', '4326');
url.searchParams.set('maxDistance', '1');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/nearest.{outputFormat}")
q := baseURL.Query()
q.Set("point", "example")
q.Set("maxDegree", "100")
q.Set("minDegree", "2")
q.Set("outputSRS", "4326")
q.Set("maxDistance", "1")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/nearest.{outputFormat}")
uri.query = URI.encode_www_form({
"point" => "example",
"maxDegree" => "100",
"minDegree" => "2",
"outputSRS" => "4326",
"maxDistance" => "1"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/gov.bc.ca/geocoder/2.0.0/intersections/nearest.{outputFormat}?" . http_build_query([
"point" => "example",
"maxDegree" => "100",
"minDegree" => "2",
"outputSRS" => "4326",
"maxDistance" => "1"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- See official documentation for authentication and setup.
What can you build with Geocoder REST API?
Geocoder REST API is a Data API. Developers commonly use data APIs for:
- enriching your app with third-party datasets
- building data pipelines and ETL workflows
- querying and searching large datasets
- powering research, analysis, and reporting tools
- syncing reference data into your own systems
No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Geocoder REST API is free to use, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide · Learn about API keys · What is REST?