Find an API

Search public APIs with auth details & Postman guides

← All APIs

Bank of Canada Valet API

bankofcanada.ca · Government

Government No Auth Free & Open Government Financial Services Banking Exchange Rates Interest Rates Economics

Free, open REST API from the Bank of Canada providing exchange rates, interest rates (overnight rate, prime rate), bond yields, financial indicators, and economic data series. No authentication required. Returns data in JSON or CSV format. Used extensively by fintech companies, banks, and developers needing authoritative Canadian monetary data. The Valet API replaces the legacy Bank of Canada data portal.

Authentication

No authentication requiredFree to use with no key needed.

Sample Requests

GET Get USD/CAD exchange rate series

Returns the Bank of Canada's noon spot USD/CAD exchange rate time series. Series key FXUSDCAD. Use ?recent=10 for last 10 observations.

https://www.bankofcanada.ca/valet/observations/FXUSDCAD/json?recent=10

Hover any highlighted part to learn what it does

curl -X GET "https://www.bankofcanada.ca/valet/observations/FXUSDCAD/json?recent=10"
import requests
params = {
    "recent": "10"
}
response = requests.get(
    "https://www.bankofcanada.ca/valet/observations/FXUSDCAD/json",
    params=params,
)
print(response.json())
const url = new URL('https://www.bankofcanada.ca/valet/observations/FXUSDCAD/json');
url.searchParams.set('recent', '10');

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://www.bankofcanada.ca/valet/observations/FXUSDCAD/json")
	q := baseURL.Query()
	q.Set("recent", "10")
	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://www.bankofcanada.ca/valet/observations/FXUSDCAD/json")
uri.query = URI.encode_www_form({
  "recent" => "10"
})

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://www.bankofcanada.ca/valet/observations/FXUSDCAD/json?" . http_build_query([
    "recent" => "10"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Get Bank of Canada overnight rate

Returns the Bank of Canada policy interest rate (overnight rate) history. Key rate used to determine prime rate at Canadian banks.

https://www.bankofcanada.ca/valet/observations/CAOVERRATESR/json?end_date=2024-12-31&start_date=2020-01-01

Hover any highlighted part to learn what it does

curl -X GET "https://www.bankofcanada.ca/valet/observations/CAOVERRATESR/json?end_date=2024-12-31&start_date=2020-01-01"
import requests
params = {
    "end_date": "2024-12-31",
    "start_date": "2020-01-01"
}
response = requests.get(
    "https://www.bankofcanada.ca/valet/observations/CAOVERRATESR/json",
    params=params,
)
print(response.json())
const url = new URL('https://www.bankofcanada.ca/valet/observations/CAOVERRATESR/json');
url.searchParams.set('end_date', '2024-12-31');
url.searchParams.set('start_date', '2020-01-01');

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://www.bankofcanada.ca/valet/observations/CAOVERRATESR/json")
	q := baseURL.Query()
	q.Set("end_date", "2024-12-31")
	q.Set("start_date", "2020-01-01")
	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://www.bankofcanada.ca/valet/observations/CAOVERRATESR/json")
uri.query = URI.encode_www_form({
  "end_date" => "2024-12-31",
  "start_date" => "2020-01-01"
})

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://www.bankofcanada.ca/valet/observations/CAOVERRATESR/json?" . http_build_query([
    "end_date" => "2024-12-31",
    "start_date" => "2020-01-01"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET List all available series

Returns all available data series in the Valet API with series keys, names, and descriptions.

https://www.bankofcanada.ca/valet/lists/series/json

Hover any highlighted part to learn what it does

curl -X GET "https://www.bankofcanada.ca/valet/lists/series/json"
import requests
response = requests.get(
    "https://www.bankofcanada.ca/valet/lists/series/json",
)
print(response.json())
const url = 'https://www.bankofcanada.ca/valet/lists/series/json';

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

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

func main() {
	targetURL := "https://www.bankofcanada.ca/valet/lists/series/json"
	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://www.bankofcanada.ca/valet/lists/series/json")

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://www.bankofcanada.ca/valet/lists/series/json";
$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 — the Bank of Canada Valet API is fully open, no registration required
  2. Base URL: https://www.bankofcanada.ca/valet
  3. Get all series keys: GET /valet/lists/series/json
  4. Fetch observations: GET /valet/observations/{seriesKey}/json?start_date=YYYY-MM-DD
  5. Key exchange rate series: FXUSDCAD, FXEURCAD, FXGBPCAD, FXJPYCAD, FXCNYRCAD
  6. Key rate series: CAOVERRATESR (overnight), PRIME (prime rate), V80691335 (5yr bond yield)
  7. Response format: { seriesDetail: {...}, observations: [{d: "date", VALUE: {v: "rate"}}] }

What can you build with Bank of Canada Valet API?

Bank of Canada Valet 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. Bank of Canada Valet 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 ↗