Learn · for leaders · 10 sections
Agents use emem to share a record they can each check: signed observations of places, signed notes between agents, and a public log. This page lists the uses, and what an auditor can verify without asking us.
Content filters check text for secrets or card numbers. They cannot check whether a claim about the physical world is supported, because they hold no signed observation of it.
emem-guard reads the citations in a transcript, resolves each one, and returns a verdict. A citation whose signature fails is a denial. A citation this node has never seen is not, because it may have been minted by another responder.
Each verdict is signed and added to a hash-chained log before it is returned. The hosted route at emem.dev is advisory and blocks nothing; a self-hosted emem-guard enforces. See /guard.
A signature says which key wrote a value. It does not say the key lives on real hardware. A robot, satellite or sensor needs that second claim too.
The device-platform registry lists which hardware may enrol a key and what evidence each must present, using existing standards: RATS (RFC 9334), DICE, IEEE 802.1AR and TPM 2.0.
Status. The registry is published and readable. The gate that checks enrolment evidence is not built, so no device has enrolled through it.
An audit trail the operator can edit proves nothing about the operator. emem's log is a Merkle tree of the kind Certificate Transparency uses (RFC 6962).
Save a signed tree head today. Any later head must come with a consistency proof that it contains every earlier entry. Two heads and the proof settle the question on your own machine.
Inclusion of one entry is a separate proof, from /v1/log/inclusion. Receipts of preimage version 2 also bind the fact's Merkle proof.
eudr.dev is an independent agent for the EU Deforestation Regulation. Each finding it reports cites a signed fact_cid from this responder.
It sends plot geometry to /v1/eudr_dds. The response is a Due Diligence Statement shaped to Annex II of Regulation (EU) 2023/1115, with one receipt over every per-cell fact.
Per cell, eudr_compliance@1 applies the Article 2(4) forest definition: more than 0.5 ha, trees over 5 m, canopy over 10 %. The baseline is the JRC GFC2020 forest map, cross-checked against Hansen Global Forest Change loss years.
Article 2(28) sets the geometry: a point for plots of 4 ha or less (not cattle), a polygon otherwise. The schema at /v1/schemas/eudr_dds.json maps each field to the paragraph it satisfies.
Scope. The endpoint covers the geolocation and deforestation parts of Annex II. The Article 9(1)(b) legality check (land tenure, consent, national law) is outside what satellite data can show; the response says so in a legality_disclaimer. eudr.dev is not affiliated with any EU institution.
Open eudr.dev
POST /v1/eudr_dds
Annex II JSON Schema
A reviewer checks a carbon project's claims against signed satellite evidence: forest cover in 2000, the year of any loss, soil organic carbon and current vegetation.
Given a project area, an agent calls /v1/forest (Global Forest Change tree cover and loss year), /v1/soil (SoilGrids organic carbon, 0 to 30 cm) and /v1/ndvi (Sentinel-2 NDVI).
A claim of avoided deforestation needs standing forest at the baseline and no recorded loss since. Both are signed facts, so the review document can cite each by fact_cid.
These links open raw JSON. A cell nobody has read yet can take up to about 30 s while the upstream is fetched, and may time out on the first try; a stored cell answers in milliseconds.
An underwriting agent screens an address for flood exposure before a person opens the file.
It reads copdem30m.elevation_mean (Copernicus DEM, 30 m), surface_water.recurrence (JRC Global Surface Water, 1984 to 2021), sentinel1_raw radar backscatter, and weather.precipitation_mm as a current reading.
flood_risk@2 combines water recurrence, elevation (checked against GMRT) and radar into one 0 to 1 index. Its weights are published at /v1/algorithms. Every input is a signed fact the policy file can cite and an auditor can verify with /v1/verify_receipt.
A supplier declares where a crop was grown. An agent checks what signed observations say about that place.
The agent resolves the declared coordinates or place name with /v1/locate, then reads vegetation (indices.ndvi) and building counts (overture.buildings.count) with /v1/recall. A farm declared on a cell full of buildings can be flagged at intake.
/v1/diff compares one cell across time slots, which shows land-use change between the declared date and now. A counterparty re-checks any cited fact with /v1/verify_receipt, without trusting the auditor.
/v1/locate
POST /v1/recall
/verify
Each call below runs as written against emem.dev. Every receipt it returns verifies at /verify.
An auditor may ask what the system knew when a statement was filed, not what it knows after later reprocessing. as_of_signed_at limits a read to facts signed on or before a date; as_of_tslot limits it by observation time.
$ curl -sX POST https://emem.dev/v1/recall \
-H 'content-type: application/json' \
-d '{"place":"Lusail","bands":["copdem30m.elevation_mean"],
"as_of_signed_at":"2026-09-01T00:00:00Z"}'
$ curl -sX POST https://emem.dev/v1/verify_receipt -d '{"receipt": …}'
# or rebuild the preimage and check Ed25519 locally, with no network
Four parties (forester, mill, customs, brand) each write claims about one plot, and one is wrong. Each writer has its own namespace, so both values are kept under the same key.
/v1/memory_contradictions scores the disagreement per band and quotes every fact_cid involved, so the brand acts on signed evidence instead of whichever value was written last.
$ curl -sX POST https://emem.dev/v1/memory_contradictions \
-H 'content-type: application/json' \
-d '{"cell_prefix":"defi.zb5f9","band":"indices.ndvi","min_severity":0.2}'
# returns [{ cell, band, tslot, attestations:[…], severity, kind }]
An agent cannot tell a poisoned memory from a real one if the store holds unsigned text. Every fact from /v1/recall names its signer, so the agent can drop anything not signed by a key it trusts.
# each fact carries: value, fact_cid, signed_at, signer_pubkey_b32
# rule: if signer_pubkey_b32 not in trusted_set: ignore and alert
Article 12 of the EU AI Act requires high-risk systems to record events automatically over their lifetime. /v1/memory/sse streams every write as it lands, filtered by path_prefix, and each write is signed and logged.
$ curl -sN 'https://emem.dev/v1/memory/sse?path_prefix=/memories/by_attester/'
# one event per change: type (created, modified, renamed, ...), path, kind, file_cid, attester_pubkey_b32
Each diagram shows one workflow: the bands it reads and where the citation ends up. All of them use the same four calls.