Rightshold™ Sign up

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.

  1. 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.
  2. Compute a SHA-256 of the exact response bytes you saved, and of the request. Any later edit changes the hash.
  3. 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.
  4. 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.
  5. 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.

What each kind of evidence shows

Screenshot: easy to edit and has no trustworthy time. It's the weakest form.

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.

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.”

One-click setup

{
  "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"
  }
}

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?

Related

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}}'