Verifying the National AI Feed
You do not have to trust Aigistry's word that the feed is intact. Every entry is signed, every entry names the one before it, and the feed carries a freshly signed statement of its newest entry. This page gives you what you need to check all of that yourself, using only the feed and the public key file.
What is here
- VERIFICATION.md: the rules (version 1), exact enough to write your own verifier.
- verify_feed.py (Python), verify-record.php.txt (PHP; save as
verify-record.php), verify-feed.mjs (Node 18+): three independent reference verifiers that give the same answers. - vectors/: 125 test vectors (one JSON file each; manifest.json lists them with checksums) (valid feeds, tampering, omissions, truncation, status entries, text edge cases) with the expected result of each. A verifier you write should pass all of them.
- SHA256SUMS: checksums of every file here. The API description is at /openapi.json; the signing keys at /public-key.json.
Check a feed in four commands
curl -H "X-API-Key: YOUR_PLATFORM_KEY" "https://feed.aigistry.com/v1/feed?after=0&limit=500" > page1.json curl https://feed.aigistry.com/public-key.json > public-key.json python3 verify_feed.py --keys public-key.json page1.json python3 verify_feed.py --vectors vectors # the folder of vector files listed in vectors/manifest.json
Keep reading while a page says has_more is true (after = the page's next_after) and pass all pages in order. Exit status 0 means nothing wrong was found, 1 means problems were found, 2 means the input could not be read.
Reading one record, provider or government
The feed can be filtered: add authority_record_id=N, provider_id=N, or official_id_type=...&official_id=... (one filter at a time). A filtered read skips other entries, so it cannot show that nothing was left out; check it with --filtered (for example python3 verify_feed.py --filtered --keys public-key.json page1.json). The verifier checks each entry, the signed head and every revision history, but not that the chain is complete. For completeness, read the whole feed without a filter.
What a clean result means
- Every entry was signed by a key in the public key file, and its text is exactly what was signed.
- The entries are in order and each names the one before it, so nothing was changed, inserted or removed in the middle.
- If the last page carried a signed head, nothing was cut from the end.
- The verifier also works out which publications are revoked from the signed status entries, so you can check it against the lookup route.
What it does not mean
- It does not prove every platform was shown the same feed. Compare the head (
seqandrecord_hash) with other platforms. - Whoever holds the signing key could rebuild the whole chain, so keep the last head you verified.
- Starting in the middle of the feed rests on trust in the first entry unless you hold an anchor from an earlier run.
- Signed does not mean safe: titles and bodies are written by providers. Treat them as untrusted data.
- A signature does not prove a provider was authorized by a government. See the authority record lookup and the status entries.
Full list and reasons: section 4 of VERIFICATION.md. Questions or a verifier that disagrees with ours: write to Aigistry LLC via aigistry.com.
