Find an API

Search public APIs with auth details & Postman guides

← All APIs

Health Canada Drug Product Database API

health-sante.gc.ca · Government

Government No Auth Free & Open Government Healthcare Life Sciences Drugs Health Pharmaceutical

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

No authentication requiredFree to use with no key needed.

Sample Requests

GET Search drugs by brand name

Searches approved drug products by brand name. Returns matching products with DIN, company, and status.

https://health-products.canada.ca/api/drug/drugproduct/?brandname=LIPITOR

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));
GET Get drug details by DIN

Returns full product details for a specific Drug Identification Number (DIN) including active ingredients, dosage, and regulatory status.

https://health-products.canada.ca/api/drug/drugproduct/?din=02230711

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));
GET Get active ingredients

Returns the active ingredient composition for a drug product using the internal product ID.

https://health-products.canada.ca/api/drug/activeingredient/?id=12345

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

Get Postman ↗
  1. No API key required — fully open API from Health Canada
  2. Base URL: https://health-products.canada.ca/api/drug
  3. Search endpoints: /drugproduct/?brandname={name}, /drugproduct/?din={din}, /drugproduct/?company={name}
  4. Additional endpoints: /activeingredient/, /company/, /route/, /form/, /schedule/
  5. Responses are in JSON — each drug product has a drug_code used for related lookups
  6. DIN is the 8-digit Drug Identification Number used on Canadian drug labels
  7. 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?

Open documentation ↗