Version 1.0 · 16 October 2026 · Assay Systems, Ottawa, Ontario, Canada
This paper is written for the engineers, security and legal reviewers of a company that takes the Assay Systems register under an Enterprise Data contract. It sets out where every record comes from, under which licence, how it is cleaned and de-duplicated, how it is protected and delivered, and the exact shape of the data.
Every record in the register is taken from a public procurement record that a government, or the public body it designates, publishes openly for reuse. Nothing is taken from behind a login, a paywall or a terms-of-use wall. Every row carries the URL of its source dataset, the licence it is published under and the publisher's own record reference, so any figure can be traced back to the government record it came from.
| Country or region | Publisher | Licence |
|---|---|---|
| Canada – contracts | Government of Canada, proactive disclosure of contracts (open.canada.ca) | Open Government Licence – Canada 2.0 |
| Canada – grants and contributions | Government of Canada (open.canada.ca) | Open Government Licence – Canada 2.0 |
| United States | USAspending.gov | U.S. Government work, public domain (17 U.S.C. 105) |
| European Union and EEA countries | Tenders Electronic Daily (TED), Publications Office of the EU | Reuse under Commission Decision 2011/833/EU |
| Countries publishing in the Open Contracting Data Standard | National procurement authorities (OCDS publications) | The publisher's licence, named in each row: CC BY 4.0, CC BY-SA 4.0, ODbL 1.0, ODC PDDL 1.0 or a national open-data licence |
| Australia, United Kingdom, New Zealand, Norway | AusTender, Contracts Finder, GETS, Doffin | The publisher's open government licence, named in each row |
Sources published under a non-commercial licence (for example CC BY-NC-SA 4.0) stay open on the public site as summaries and are excluded from every paid service, Enterprise Data included. Share-alike sources are delivered under the same licence, as that licence requires.
The register is built by an automated pipeline with six stages. Each build writes a manifest that records what went in, what was removed and what failed a check.
Raw government contract data cannot be summed as published. The register corrects two structural problems before any figure is counted.
The Government of Canada publishes each amendment to a contract as a separate row, and the value on that row is the full value of the contract after the amendment, not the increment. Adding the rows counts the same contract several times.
Example from the published record: one contract signed on 5 October 2011 appears in four rows. Their sum is $1,088,662,391; the real value of the contract is $348,625,938, the last published figure. Across the federal register, summing raw rows overstates the value of contracts by 43 percent.
The register keys a contract by supplier, date signed, original value and buying department, and keeps the last published record in each key, which carries the final value. Grants and contributions are keyed by the agreement number, so a grant amended or republished under a new reference is still counted once.
The same supplier is written many ways in government records: case, punctuation, legal suffixes, truncation, misspellings. The register merges spellings only inside one financial key: the original value to the cent, the start date and the buying department must all match. Name similarity is used as a limit on a merge, never as proof of one.
Merges are graded exact or probable. In the Canadian register 6,420 families of spellings were merged this way, 5,934 exact and 486 probable. For example, five spellings of one detection-equipment supplier under one Canada Border Services Agency contract resolve to a single supplier record.
X-API-Key header and carry a tier that decides which data they reach.Every API answer is JSON in UTF-8. A machine-readable list of the endpoints is at
GET https://assay-systems.com/api/v1.
{
"api": "assay-systems/v1",
"key_tier": "none | open | commercial",
"retrieved": "YYYY-MM-DDThh:mm:ssZ",
"source": "Assay Systems register, https://assay-systems.com/register/",
"data": { ...record... }
}
A record (/api/v1/supplier/{country}/{id}, /line/, /contract/, /grants/)
holds id, type, country, name, url, register,
line, summary, figures, sections and cite_as.
| Field | Type | Meaning |
|---|---|---|
id | string | Stable row identifier in the register |
country | string | ISO 3166-1 alpha-2 code, lower case |
buyer | string | Buying department or agency |
buyer_id | string or null | Register identifier of the buyer |
office | string or null | Buying office |
office_email | string or null | Procurement mailbox, as published by the department |
office_phone | string or null | Office telephone, as published |
supplier | string | Supplier, after entity resolution |
supplier_id | string or null | Register identifier of the supplier |
line | string or null | Line of business in the register |
code | string or null | Commodity or service code of the source |
description | string or null | Description, as published |
value | number | Final contract value, after amendments |
currency | string | ISO 4217 code, as published |
signed | date or null | Date signed, YYYY-MM-DD |
ends | date or null | End date, YYYY-MM-DD |
procedure | string or null | Procurement procedure (open, limited, sole source) |
bidders | integer or null | Number of bids received |
record_ref | string or null | The publisher's own record reference |
source_url | string | Source dataset |
licence | string | Licence of the source |
updated | date | Date the row was last updated in the register |
Paged answers wrap rows as {"source", "key_tier", "licence", "register", "built", "data": {...rows, page...}}.
Bulk files carry the same rows, one JSON object per line, gzip-compressed, with a manifest.json per country.
GET /api/v1/countries · GET /api/v1/search?q=&country=&limit=GET /api/v1/supplier/{country}/{id} · /line/{country}/{id} · /contract/{country}/{id} · /grants/{country}/{id}GET /api/v1/uncontested · /uncontested/{country}[/{page}] · /page/{path under /register/}GET /api/v1/line/{country}/{id}/contracts?page=&ends_before=&buyer= ·
/supplier/{country}/{id}/contracts?page= · /ending?country=&line=&before= ·
/solo · /solo/{country}?kind=pairs|locks|buyers