Evidence an investigator can take to court
Hash-only evidence records for cases such as prediction-market fraud, amendments that point back, and an export with proofs and timestamps.
Who this is for
Investigators, fraud teams and lawyers, for example in prediction-market fraud cases.
The problem
Screenshots and exports are easy to challenge. Recording each item by hash as it is collected fixes when it existed, and an amend-only chain shows every later change.
How it works
- Each evidence item gets an evidence record with
case_idanditem_id, by hash only. - An amendment is a new record whose
amendsnames the earlier one. - The case exports as a bundle with proofs and timestamps.
Routes it uses
POST /v1/records: append a signed record; the answer carries its digest and inclusion proof.GET /v1/records?ref={ref}: every record carrying a handle such as a PR, incident or case id.POST /v1/export: an offline bundle with proofs and timestamps for up to 100 records.
Set it up
Step 1. Record on capture
Hash each item when captured and publish an evidence record: evidence: { case_id, item_id, kind, captured_at }. Content stays with you.
BODY='{ ...record }'
SIG=$(printf %s "$BODY" | ./sign-ed25519) # base64url signature over these exact bytes
curl -s -X POST 'https://aisourceoftruth.com/v1/records' \
-H "Authorization: Bearer $AISOT_TOKEN" \
-H "X-AISOT-Key-Id: $AISOT_KEY_ID" \
-H "X-AISOT-Signature: $SIG" \
-H "Idempotency-Key: $(uuidgen)" \
-H 'Content-Type: application/vnd.aisot.record+json' \
--data-binary "$BODY"
Check: Each captured item has a record.
Step 2. Amend, never edit
For a corrected item, publish a new record with amends naming the old record.
BODY='{ ...record }'
SIG=$(printf %s "$BODY" | ./sign-ed25519) # base64url signature over these exact bytes
curl -s -X POST 'https://aisourceoftruth.com/v1/records' \
-H "Authorization: Bearer $AISOT_TOKEN" \
-H "X-AISOT-Key-Id: $AISOT_KEY_ID" \
-H "X-AISOT-Signature: $SIG" \
-H "Idempotency-Key: $(uuidgen)" \
-H 'Content-Type: application/vnd.aisot.record+json' \
--data-binary "$BODY"
Check: The case chain shows the amendment linked to the original.
Step 3. List the case
List every record for the case by its case id.
curl -s -H 'Accept: application/json' 'https://aisourceoftruth.com/v1/records?ref={ref}'
Check: The count matches your evidence log.
Step 4. Export
Export the case for a regulator or a court.
curl -s -X POST 'https://aisourceoftruth.com/v1/export' \
-H 'Content-Type: application/json' \
--data '{"digests":["{digest}"]}'
Check: The bundle verifies offline.
Publishing needs a publisher key and a token. The one-time setup is on /agents and in the plan's design.md.
Wire it into your agent
Publish from the capture tool, so an item cannot enter the case folder without a record.
MCP: add https://aisourceoftruth.com/mcp to the agent's MCP servers. Tools used: publish_record, search_records, export_bundle. Read tools need no token.
With the PromptReports products, or alone
- No PromptReports product adds a step here.
- Alone: every step above uses only AI Source of Truth.
Expected outcomes
- Every item has a fixed capture time and an unbroken amendment chain.
What it does not prove
- Records prove existence and order, not what the evidence means or that it is admissible.
The OpenSpec plan for your agent
Your coding agent fetches the plan and writes it into your repo as openspec/changes/integrate-aisot-evidence-records/:
curl -H 'Accept: application/json' 'https://aisourceoftruth.com/use-cases/evidence-for-court/openspec?lang=python'
proposal.md: why, what changes in your product, impact.design.md: where the calls sit in your agent, with code for each call.tasks.md: checkable tasks, each step paired with a check against the live registry.specs/evidence-records/spec.md: the requirements and scenarios.
Read it here: OpenSpec plan. Back to all use cases or the documentation library.