Ontario Open Data Catalogue API
ontario.ca · Government
CKAN-based open data API for the Province of Ontario's data catalogue at data.ontario.ca. Provides access to 2,000+ provincial datasets covering health, education, infrastructure, environment, justice, social services, and economic data. Fully open with no authentication required. Key datasets include municipal boundaries, hospital locations, land title records, vehicle registration, and public health data.
Authentication
Sample Requests
Searches Ontario's open data catalogue. Returns dataset metadata with download URLs.
Hover any highlighted part to learn what it does
curl -X GET "https://data.ontario.ca/api/3/action/package_search?q=hospital%20locations&rows=10&sort=score%20desc%2C%20metadata_modified%20desc"
import requests
params = {
"q": "hospital locations",
"rows": "10",
"sort": "score desc, metadata_modified desc"
}
response = requests.get(
"https://data.ontario.ca/api/3/action/package_search",
params=params,
)
print(response.json())const url = new URL('https://data.ontario.ca/api/3/action/package_search');
url.searchParams.set('q', 'hospital locations');
url.searchParams.set('rows', '10');
url.searchParams.set('sort', 'score desc, metadata_modified desc');
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://data.ontario.ca/api/3/action/package_search")
q := baseURL.Query()
q.Set("q", "hospital locations")
q.Set("rows", "10")
q.Set("sort", "score desc, metadata_modified desc")
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://data.ontario.ca/api/3/action/package_search")
uri.query = URI.encode_www_form({
"q" => "hospital locations",
"rows" => "10",
"sort" => "score desc, metadata_modified desc"
})
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://data.ontario.ca/api/3/action/package_search?" . http_build_query([
"q" => "hospital locations",
"rows" => "10",
"sort" => "score desc, metadata_modified desc"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Returns metadata and download links for a specific Ontario dataset by ID or slug.
Hover any highlighted part to learn what it does
curl -X GET "https://data.ontario.ca/api/3/action/package_show?id=ontario-hospitals"
import requests
params = {
"id": "ontario-hospitals"
}
response = requests.get(
"https://data.ontario.ca/api/3/action/package_show",
params=params,
)
print(response.json())const url = new URL('https://data.ontario.ca/api/3/action/package_show');
url.searchParams.set('id', 'ontario-hospitals');
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://data.ontario.ca/api/3/action/package_show")
q := baseURL.Query()
q.Set("id", "ontario-hospitals")
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://data.ontario.ca/api/3/action/package_show")
uri.query = URI.encode_www_form({
"id" => "ontario-hospitals"
})
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://data.ontario.ca/api/3/action/package_show?" . http_build_query([
"id" => "ontario-hospitals"
]);
$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
- No API key needed — Ontario open data portal uses standard CKAN API, open access
- Base URL: https://data.ontario.ca/api/3/action/
- Search datasets: package_search?q={keyword}&organization={org}
- List organizations: organization_list
- Key datasets for insurance: Motor Vehicle Collision data, Hospital Locations, Census Profiles
- Datasets come in CSV, JSON, GeoJSON, XML, and Esri Shapefile formats
- Ontario also offers dedicated APIs for specific services — check data.ontario.ca for links
What can you build with Ontario Open Data Catalogue API?
Ontario Open Data Catalogue API is a Government API. Developers commonly use government APIs for:
- surfacing public datasets in citizen-facing apps
- building transparency and civic engagement tools
- accessing legislation, court records, and official data
- powering research and journalism tools
- creating compliance and regulatory monitoring dashboards
No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Ontario Open Data Catalogue 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?