Documentation menu
Getting started
QuickstartEndpoints
GET/sourcesGET/tender/alerts/unsubscribeGET/vendorsGET/departmentsGET/expiringGET/tender/feedGET/tender/{record_id}/documents/{doc_index}GET/department/{name}GET/process/{process_key}GET/vendor/{name}GET/contractGET/tenderGET/awardGET/disclosureGET/standing_offerGET/pre_solicitationGET/contract/statsGET/tender/statsGET/award/statsGET/disclosure/statsGET/standing_offer/statsGET/pre_solicitation/statsGET/contract/coverageGET/tender/coverageGET/award/coverageGET/disclosure/coverageGET/standing_offer/coverageGET/pre_solicitation/coverageGET/procurement/{solicitation_number}GET/contract/{record_id}GET/tender/{record_id}GET/award/{record_id}GET/disclosure/{record_id}GET/standing_offer/{record_id}GET/pre_solicitation/{record_id}Docs / Guides / Getting started and authentication
Getting started and authentication
Get an API key and make your first authenticated call in under five minutes.
Every ProcureData request is authenticated with an API key sent as a header. There is nothing to install and no OAuth flow.
1. Get your key
Sign up at procuredata.ca/subscribe/ with your email address. The free tier needs no card, and your key appears on your dashboard straight away.
2. Send it on every request
Pass a single header with each call:
curl --request GET \
--url 'https://api.procuredata.ca/sources' \
--header 'X-API-Key: YOUR_API_KEY'import requests
url = "https://api.procuredata.ca/sources"
headers = {"X-API-Key": "YOUR_API_KEY"}
resp = requests.get(url, headers=headers)
print(resp.json())const res = await fetch("https://api.procuredata.ca/sources", {
headers: {
"X-API-Key": "YOUR_API_KEY",
},
});
const data = await res.json();
console.log(data);<?php
$ch = curl_init("https://api.procuredata.ca/sources");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"X-API-Key: YOUR_API_KEY",
]);
echo curl_exec($ch);require "net/http"
require "uri"
uri = URI("https://api.procuredata.ca/sources")
req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = "YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.bodypackage main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.procuredata.ca/sources", nil)
req.Header.Add("X-API-Key", "YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}import java.net.URI;
import java.net.http.*;
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.procuredata.ca/sources"))
.header("X-API-Key", "YOUR_API_KEY")
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());3. You're in
A 200 response returns JSON. A 403 means the key is missing, wrong, or no longer active; a 429 means you have spent the day's requests. See the endpoint reference for every route ProcureData exposes.
Ready to build?Create a free key and start calling ProcureData in minutes. No card required.
Get your API key →