Health Canada Drug Product Database API
health-sante.gc.ca · Government
REST API for Health Canada's Drug Product Database (DPD) — the authoritative Canadian registry of approved drug products. Returns drug product information including DIN (Drug Identification Number), brand name, active ingredients, dosage form, route of administration, therapeutic class, and marketing status. Used by pharmacies, health information systems, insurance formulary management, and clinical decision support tools.
Authentication
Sample Requests
Searches approved drug products by brand name. Returns matching products with DIN, company, and status.
Hover any highlighted part to learn what it does
curl -X GET "https://health-products.canada.ca/api/drug/drugproduct/?brandname=LIPITOR"
import requests
response = requests.get(
"https://health-products.canada.ca/api/drug/drugproduct/?brandname=LIPITOR",
)
print(response.json())const url = 'https://health-products.canada.ca/api/drug/drugproduct/?brandname=LIPITOR'; const response = await fetch(url); const data = await response.json(); console.log(data);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "https://health-products.canada.ca/api/drug/drugproduct/?brandname=LIPITOR"
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://health-products.canada.ca/api/drug/drugproduct/?brandname=LIPITOR")
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://health-products.canada.ca/api/drug/drugproduct/?brandname=LIPITOR";
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Returns full product details for a specific Drug Identification Number (DIN) including active ingredients, dosage, and regulatory status.
Hover any highlighted part to learn what it does
curl -X GET "https://health-products.canada.ca/api/drug/drugproduct/?din=02230711"
import requests
response = requests.get(
"https://health-products.canada.ca/api/drug/drugproduct/?din=02230711",
)
print(response.json())const url = 'https://health-products.canada.ca/api/drug/drugproduct/?din=02230711'; const response = await fetch(url); const data = await response.json(); console.log(data);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "https://health-products.canada.ca/api/drug/drugproduct/?din=02230711"
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://health-products.canada.ca/api/drug/drugproduct/?din=02230711")
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://health-products.canada.ca/api/drug/drugproduct/?din=02230711";
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Returns the active ingredient composition for a drug product using the internal product ID.
Hover any highlighted part to learn what it does
curl -X GET "https://health-products.canada.ca/api/drug/activeingredient/?id=12345"
import requests
response = requests.get(
"https://health-products.canada.ca/api/drug/activeingredient/?id=12345",
)
print(response.json())const url = 'https://health-products.canada.ca/api/drug/activeingredient/?id=12345'; const response = await fetch(url); const data = await response.json(); console.log(data);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "https://health-products.canada.ca/api/drug/activeingredient/?id=12345"
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://health-products.canada.ca/api/drug/activeingredient/?id=12345")
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://health-products.canada.ca/api/drug/activeingredient/?id=12345";
$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 required — fully open API from Health Canada
- Base URL: https://health-products.canada.ca/api/drug
- Search endpoints: /drugproduct/?brandname={name}, /drugproduct/?din={din}, /drugproduct/?company={name}
- Additional endpoints: /activeingredient/, /company/, /route/, /form/, /schedule/
- Responses are in JSON — each drug product has a drug_code used for related lookups
- DIN is the 8-digit Drug Identification Number used on Canadian drug labels
- Available in English and French — append &lang=fr for French responses
What can you build with Health Canada Drug Product Database API?
Health Canada Drug Product Database 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. Health Canada Drug Product Database 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?