Find an API

Search public APIs with auth details & Postman guides

← All APIs

Ontario Open Data Catalogue API

ontario.ca · Government

Government No Auth Free & Open Government Open Data Government Analytics

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

No authentication requiredFree to use with no key needed.

Sample Requests

GET Search Ontario datasets

Searches Ontario's open data catalogue. Returns dataset metadata with download URLs.

https://data.ontario.ca/api/3/action/package_search?q=hospital locations&rows=10&sort=score desc, metadata_modified desc

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));
GET Get dataset resources

Returns metadata and download links for a specific Ontario dataset by ID or slug.

https://data.ontario.ca/api/3/action/package_show?id=ontario-hospitals

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

Get Postman ↗
  1. No API key needed — Ontario open data portal uses standard CKAN API, open access
  2. Base URL: https://data.ontario.ca/api/3/action/
  3. Search datasets: package_search?q={keyword}&organization={org}
  4. List organizations: organization_list
  5. Key datasets for insurance: Motor Vehicle Collision data, Hospital Locations, Census Profiles
  6. Datasets come in CSV, JSON, GeoJSON, XML, and Esri Shapefile formats
  7. 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?

Open documentation ↗