---
title: "Verify a report receipt"
method: POST
path: "/api/v1/receipt/verify"
tags: ["Receipts"]
---

# Verify a report receipt

`POST /api/v1/receipt/verify`

## Request

- Base URL: `https://tamperlens.com` (the document declares no server; this is the origin it was published from)
- URL: `https://tamperlens.com/api/v1/receipt/verify`
- Auth: none declared

Checks whether a `receipt` block was issued by Tamperlens and whether it covers the `report` you send with it.

Tamperlens never stores the documents it inspects, so it cannot reproduce a report to settle a dispute. The receipt is the alternative: you keep the report and its receipt, and this endpoint confirms the pair.

Send the report **exactly as you received it**, including the `id`. Remove the `receipt` key itself, a receipt cannot cover itself, or leave it in place; both are accepted, and it is stripped before hashing either way.

`valid: false` carries a `reason`: `bad_signature` means we did not issue this receipt at all, while `report_mismatch` means the receipt is genuine but the report you sent is not the one it was issued for. Those are different problems and the endpoint will not collapse them.

## Request body

- object
  - `report` object, required
  - `receipt` object, required

## Response `200`

Default Response

- object
  - `valid` boolean
  - `reason` string

## Other responses

- `503`: Default Response

---

[API](https://skmtc.dev/tamperlens/apis/tamperlens-api.md) · [All operations](https://skmtc.dev/tamperlens/apis/tamperlens-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tamperlens/apis/tamperlens-api/revisions/e1b7ae64347b?raw)
