For GovTech Providers
Publish once through the API and every connected AI Platform reads the same signed record. The same integration serves every government you publish for.
Get started
- Request an account at admin@aigistry.com.
- Sign in at https://feed.aigistry.com/signin.html with the one-time link sent to your email.
- Create a GovTech Provider key in the dashboard. It is shown once; label it (for example, Production or Staging).
- Check it:
GET /v1/whoamianswers with"kind":"provider".
Evaluation sandbox. A separate sandbox at sandbox.feed.aigistry.com runs the same API with synthetic data, so you can test your integration before using the live service. Access is by request at admin@aigistry.com.
curl -s -H "X-API-Key: YOUR_PROVIDER_KEY" \
"https://feed.aigistry.com/v1/whoami"
In the examples, YOUR_PROVIDER_KEY stands for your key and 42 for the authority record id that enrollment returns.
1. Enroll governments
Enroll each government you publish for. The attestation must be true: it confirms you are authorized to publish for every government listed. official_id is text, so keep leading zeros. Use census_pid6 or nces_leaid for governments on those lists, and other with an identifier you supply for governments that are not.
curl -s -X POST -H "X-API-Key: YOUR_PROVIDER_KEY" -H 'Content-Type: application/json' \
-d '{"official_id_type":"census_pid6","official_id":"101917","name":"TOWN OF MICANOPY","state":"FL","attestation":true,"attestation_version":"2026-1"}' \
"https://feed.aigistry.com/v1/authority-records"
The answer has one result per item (created, already_enrolled, re_enrolled or rejected, with a reason when rejected) and a summary. Send up to 500 governments in one request with "records":[ ... ] beside the attestation. The authority_record_id in each result is the id used in every publication route. GET /v1/authority-records lists your enrollments, with filters for status, flagged, state and q.
2. Upload files
A PDF or Word .docx file, up to 20 MB, as the multipart field file. The answer carries the file's id, filename, content_type, size and sha256.
curl -s -H "X-API-Key: YOUR_PROVIDER_KEY" -F "file=@notice.pdf" \
"https://feed.aigistry.com/v1/authority-records/42/files"
List the returned id in attachments of a publication (up to 5). Each file is bound to the authority record it was uploaded for and can be attached once.
3. Publish
curl -s -X POST -H "X-API-Key: YOUR_PROVIDER_KEY" -H 'Content-Type: application/json' \
-d '{"external_id":"notice-2026-001","title":"Road closure on Main Street","body":"Main Street is closed between 1st and 5th Avenue from 8 June to 12 June.","agency":"Department of Public Works","source_url":"https://example.gov/notices/2026-001","published_at":"2026-06-01T09:00:00Z"}' \
"https://feed.aigistry.com/v1/authority-records/42/publications"
The answer is the signed entry's receipt: seq, revision, received_at, record_hash and signature. A new external_id is revision 1. Your external_id is yours: 1 to 128 printable characters with no spaces, unique within the authority record. Two ids that differ only in capitalization are refused. title is up to 300 characters and body up to 100000. source_url must be a public http or https address.
4. Revise
Post the same external_id again with the new content. The new entry supersedes the previous one (revision 2, supersedes_seq naming the entry it replaces), and the history stays in the feed. Posting identical content again changes nothing and returns the existing entry with "unchanged":true.
curl -s -X POST -H "X-API-Key: YOUR_PROVIDER_KEY" -H 'Content-Type: application/json' \
-d '{"external_id":"notice-2026-001","title":"Road closure on Main Street","body":"Main Street is closed between 1st and 5th Avenue from 8 June to 14 June.","published_at":"2026-06-01T09:00:00Z"}' \
"https://feed.aigistry.com/v1/authority-records/42/publications"
5. Check state
curl -s -H "X-API-Key: YOUR_PROVIDER_KEY" \
"https://feed.aigistry.com/v1/authority-records/42/publications/notice-2026-001"
The answer gives state (current, withdrawn or revoked), the current revision and the history of signed entries for the publication.
6. Withdraw
curl -s -X DELETE -H "X-API-Key: YOUR_PROVIDER_KEY" \
"https://feed.aigistry.com/v1/authority-records/42/publications/notice-2026-001"
A signed removal entry is appended and the publication's state becomes withdrawn. Repeating the request returns the existing withdrawal. A publication that has been revoked cannot be changed or withdrawn until the revocation is lifted (409).
Ending an enrollment
curl -s -X DELETE -H "X-API-Key: YOUR_PROVIDER_KEY" \
"https://feed.aigistry.com/v1/authority-records/42"
This writes a signed ended status entry. Nothing is deleted, and the publications stay in the feed. Enrolling the government again makes the record active and writes a signed reinstatement.
Limits
- 600 entries per 60 seconds per GovTech Provider, counted over records, withdrawals and status entries together; more get 429.
- 60 file uploads per 60 seconds; more get 429.
- 30 enrollment requests per 60 seconds; more get 429. A batch is one request, up to 500 governments.
- Up to 5 attachments per publication, 20 MB per file, 128 characters per
external_id.
Errors
Errors are JSON, {"error":"..."}, with the status code carrying the class: 400 the request was not valid, 401 missing or invalid key, 403 the key cannot do that, 404 not found or not yours, 409 not allowed in the current state, 413 file too large, 429 limit reached, 503 signing is temporarily unavailable. A 503 changes nothing and carries Retry-After in seconds; retry the same request. Every status of every route is in the API reference.
