CivicMemory

API

Everything the site shows is available as JSON. Read-only, no key, no rate limit beyond ordinary courtesy. If you want a copy of the record, take one.

The archive is content-addressed, so you never have to trust this API. Fetch the raw object, hash it yourself, and compare it with the digest we published.

Endpoints

EndpointReturns
GET /api/status Whether the system is actually working. 503 if no collection has completed in 24 hours. Lists every source currently erroring or returning 4xx.
GET /api/health Whether the web process is up. Nothing else. Kept trivially stable.
GET /api/stats Counts: sources, observations, archived objects, events, derived documents.
GET /api/sources Every watched source, its agency, tags, and when it was last checked.
GET /api/events The timeline. ?limit= 1–500, ?offset=, ?q= to search. Each row carries the SHA-256 of the current and previous objects, and the observer.
GET /archive/<sha256> The evidence. The raw bytes exactly as retrieved. This is the thing everything else is derived from.
GET /archive/<sha256>/metadata Every retrieval of that object: URL, time, status, content type, and whether it still hashes to its own name.

Verify a record yourself

# take any event
curl -s https://civicmemory.ai-ministries.com/api/events?limit=1

# pull the raw object it names, and hash it
curl -s https://civicmemory.ai-ministries.com/archive/<sha256> | sha256sum

# the digest you get is the filename you asked for, or we are lying to you

Reading a row

observerself means we retrieved it directly. Anything else, such as internet-archive, means somebody else observed it and we fetched their capture.
observed_atWhen we retrieved it. Never backdated, under any circumstances.
original_observed_atWhen the third party observed it, where that applies.
sha256The current object. Fetch and verify it.
previous_sha256The version it replaced, still archived and still fetchable.
event_typefirst_seen, changed, unavailable, disappeared, recovered.

What is not in the API

Diffs are derived data and are shown on event pages rather than served as a bulk feed, deliberately. A diff is our reading of two archived objects, not evidence. If you want to check one, take both objects and diff them yourself; that is the whole point of publishing the hashes.

There are no visitor analytics to expose, because none are collected.