Documentation menu
Docs / Guides / Getting started and authentication

Getting started and authentication

Get an API key and make your first authenticated call in under five minutes.

Every BuildData request is authenticated with an API key sent as a header. There is nothing to install and no OAuth flow.

1. Get your key

Sign up at builddata.ca/subscribe/ with your email address. The free tier needs no card, and your key appears on your dashboard straight away.

2. Send it on every request

Pass a single header with each call:

curl --request GET \
  --url 'https://api.builddata.ca/permit?municipality=toronto&limit=5' \
  --header 'X-API-Key: YOUR_API_KEY'
import requests

url = "https://api.builddata.ca/permit?municipality=toronto&limit=5"
headers = {"X-API-Key": "YOUR_API_KEY"}
resp = requests.get(url, headers=headers)
print(resp.json())
const res = await fetch("https://api.builddata.ca/permit?municipality=toronto&limit=5", {
  headers: {
    "X-API-Key": "YOUR_API_KEY",
  },
});
const data = await res.json();
console.log(data);
<?php
$ch = curl_init("https://api.builddata.ca/permit?municipality=toronto&limit=5");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "X-API-Key: YOUR_API_KEY",
]);
echo curl_exec($ch);
require "net/http"
require "uri"

uri = URI("https://api.builddata.ca/permit?municipality=toronto&limit=5")
req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = "YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://api.builddata.ca/permit?municipality=toronto&limit=5", nil)
    req.Header.Add("X-API-Key", "YOUR_API_KEY")
    res, _ := http.DefaultClient.Do(req)
    defer res.Body.Close()
    body, _ := io.ReadAll(res.Body)
    fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.*;

HttpRequest req = HttpRequest.newBuilder()
    .uri(URI.create("https://api.builddata.ca/permit?municipality=toronto&limit=5"))
    .header("X-API-Key", "YOUR_API_KEY")
    .build();
HttpResponse<String> res = HttpClient.newHttpClient()
    .send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());

3. You're in

A 200 response returns JSON. A 403 means the key is missing, wrong, or no longer active; a 429 means you have spent the day's requests. See the endpoint reference for every route BuildData exposes.

Ready to build?Create a free key and start calling BuildData in minutes. No card required.
Get your API key →