Answers · AI evidence
How do I prove what an AI model said at a specific time?
Last updated
TL;DR: Keep the raw API response (its id, created time, exact model snapshot and request parameters), not a screenshot, hash it, and get an independent timestamp on the hash. Re-running the prompt later won't reproduce the answer, and provider logs are short-lived, so the proof has to be captured when the answer comes back. A hash plus a timestamp proves the text existed at that time. It doesn't prove the model produced it or that it's true.
What should I check, step by step?
1. Save the full JSON response from the API, not a copy of the text. OpenAI's Chat Completions object includes id, created (a Unix timestamp in seconds), model (the exact snapshot that answered) and system_fingerprint. Save the request you sent with it: messages, model, temperature, seed and any tools.
- Store it yourself. Chat Completions only keeps a retrievable copy if you set store to true, and OpenAI's data controls page lists 30 days of application state for the Responses API and up to 30 days for abuse monitoring logs. Under Zero Data Retention, store is treated as false.
- Compute a SHA-256 of the exact response bytes you saved, and of the request. Any later edit changes the hash.
- Get the hash timestamped by someone other than you: an RFC 3161 timestamp authority, OpenTimestamps (which anchors to Bitcoin), or a receipt service. A timestamp you write yourself isn't evidence of anything.
- For a ChatGPT conversation (no API response), make a shared link and also export or save the page. OpenAI's help page says a shared link is a snapshot up to when you shared it, can be updated, and stops working if the link or the chat is deleted.
- Write down what you can't prove: that the text wasn't edited before you hashed it, and that the named model, rather than something else, produced it.
Why you can't just re-run the prompt
OpenAI's API reference describes seed as best effort and says determinism is not guaranteed. It tells you to compare system_fingerprint, which changes when the backend configuration changes, to see whether that might explain a different answer.
- Models change and get retired. OpenAI's deprecations page lists shutdown dates for older models, and Anthropic's models overview says that for models before the 4.6 generation the short alias is a pointer that resolves to a dated ID (from 4.6 on, every ID is a pinned snapshot). The exact model value in the saved response is the best record of which model answered.
- So the answer has to be captured and fixed when it's returned. Trying to reproduce it months later usually gives a different answer.
What each kind of evidence shows
Screenshot: easy to edit and has no trustworthy time. It's the weakest form.
- Saved API response: has the provider's id, created time and model snapshot. But the file is yours, so on its own it shows what you say the provider returned.
- Hash plus independent timestamp: RFC 3161 describes a timestamp authority as proof that a datum existed before a particular time. OpenTimestamps proofs, once confirmed (a few hours), say a Bitcoin block attests the hash existed by then, and anyone can verify that with a Bitcoin node. This shows the text was fixed by that time. It still doesn't show who wrote it.
- Provider-side copy: a stored completion can be fetched by its id with your API key for as long as it's kept. That's strong evidence for you, but a third party can't check it without access to your account.
- The response objects in OpenAI's and Anthropic's API references don't carry a signature over the output that an outsider can check. Anthropic's thinking-block signature is an encrypted copy of the reasoning that you pass back unchanged, and Anthropic's API uses it to verify the block came from Claude. An outsider can't check it.
When the AI got something wrong
For a hallucination or bad-advice dispute, keep the prompt as well as the output. What the model was asked, and with which system prompt and tools, usually decides who's responsible.
- Record what you did with the answer and when, alongside the hashed response. A timeline that starts with a timestamped response is much harder to argue with than a memory of it.
How do I ask Rightshold about this (free, no key)?
Add the MCP server https://www.rightshold.com/mcp to Claude, Cursor, ChatGPT, Grok or VS Code, then ask: “Record a signed receipt for this model answer: the model snapshot, a hash of the request and of the raw response, and when it ran, so I can show later exactly what it said.”
{
"tool": "record_ai_run",
"arguments": {
"model": "gpt-4o-2024-08-06",
"provider": "openai",
"prompt_sha256": "<sha256 of the saved request JSON>",
"output_sha256": "<sha256 of the saved response JSON>",
"params": {
"response_id": "<chatcmpl id>",
"system_fingerprint": "<from the response>",
"seed": 42
},
"ran_at": "2026-10-30T14:00:00Z"
}
}- Needs an API key. You can send hashes only; if you send the text instead, Rightshold stores only its SHA-256. The receipt is signed (Ed25519), gets an issued_at time from Rightshold's clock, and goes on Rightshold's append-only ledger, whose blocks are also anchored to Bitcoin through OpenTimestamps.
- verify_ai_run is free and needs no key. Anyone can send the receipt id, or the receipt and its signature, plus the response text, to check it matches the recorded hash.
- In recorded mode the receipt marks the run as reported by the caller. If you need Rightshold to see the answer first-hand, POST /v1/ai-runs/agreement has Rightshold call 2 to 5 models itself at temperature 0 (API key; a $0.01 fee plus model cost and 20% is announced from Nov 6, 2026 UTC).
A receipt proves what was recorded and when Rightshold recorded it. In recorded mode it doesn't prove the named model produced the output, and no mode proves the output is true. Rightshold isn't a qualified timestamp authority. Not legal advice; ask a lawyer what evidence your court or contract needs.
What are the sources?
- OpenAI API reference: The chat completion object (created, model, system_fingerprint)
- OpenAI API reference: Create chat completion (seed, store)
- OpenAI: Data controls in the OpenAI platform (retention, Zero Data Retention)
- OpenAI: Deprecations
- OpenAI Help: ChatGPT Shared Links FAQ
- Anthropic: Models overview (model IDs and aliases)
- Anthropic: Thinking (signature field)
- RFC 3161: Time-Stamp Protocol
- OpenTimestamps client
Related
- How to make LLM eval results reproducible and tamper-evident
- Can I use ChatGPT output commercially?
- How to log every AI agent tool call for audit
- Verified AI Runs
Not legal advice. JSON · Markdown · All answers
Get a free API key in one call
No card and no email needed. 100 free credits; the license and policy checks stay free without a key.
curl -s -X POST https://www.rightshold.com/v1/accounts/signup -H "Content-Type: application/json" -d '{"accept_terms":true}'
export RIGHTSHOLD_API_KEY=rs_... # the api_key from the reply (shown once)
curl -s https://www.rightshold.com/v1/licenses/check -H "Authorization: Bearer $RIGHTSHOLD_API_KEY" \
-H "Content-Type: application/json" -d '{"license":"MIT","intended_use":{"commercial_use":true}}'
