---
title: "A stored check receipt, no key needed"
method: GET
path: "/v1/receipts/{id}"
---

# A stored check receipt, no key needed

`GET /v1/receipts/{id}`

## Request

- Base URL: `https://api.recallsapi.com`
- URL: `https://api.recallsapi.com/v1/receipts/{id}`
- Auth: none required

Returns the receipt exactly as it was issued with `receipt=1` on /v1/check or `receipt: true` on the MCP check_product tool. Free and unmetered. Receipts are kept for 400 days.

## Path parameters

- `id` string, required

## Response `200`

OK

- Receipt: A dated, verifiable record of what recallsapi.com held when a product was checked: the normalized input, match counts, the state of every source and a plain statement, signed with Ed25519. It is not a safety certification and absence of a match does not mean a product is safe. Stored for 400 days.
  - `id` string
  - `issued_at` string, date-time
  - `issuer` 'recallsapi.com (PrimeZen LLC)'
  - `input` object: The normalized input: the resolved block of the check
  - `result` object
    - `matches` object
      - `exact` integer
      - `strong` integer
      - `possible` integer
    - `signals` integer: Early-warning signals in the answer
    - `adverse_events` boolean, nullable: true when FDA MAUDE held reports for the brand and model; false when both were given and the live lookup answered nothing; null when the check did not look
  - `sources` object[]: Every recall source, as /v1/health reported it at issue time
    - `source` string
    - `status` 'ok' | 'stale' | 'pending' | 'coming_soon'
    - `last_success` string, date-time, nullable
    - `records` integer
    - `newest_record` string, nullable
  - `signal_sources` object[]: Every early-warning signal source at issue time
    - `source` string
    - `status` 'ok' | 'stale' | 'pending' | 'coming_soon'
    - `last_success` string, date-time, nullable
    - `records` integer
    - `newest_record` string, nullable
  - `statement` string: What was or was not found, as of issued_at, and what the receipt is not
  - `signature` object, nullable: null while signing is not enabled (then note says so)
    - `alg` 'Ed25519'
    - `kid` string: First 8 hex characters of the SHA-256 of the SPKI public key; look it up in /.well-known/recallsapi-keys.json
    - `value` string: base64url Ed25519 signature over the canonical JSON (object keys sorted recursively, arrays in order, no whitespace) of the receipt without the signature field
  - `note` string: Only when signature is null
  - `verify_url` string, uri: GET returns the stored receipt without a key

## Other responses

- `400`: The id is not in the receipt format
- `404`: No receipt with that id

---

[API](https://skmtc.dev/recallsapi/apis/recallsapi-com.md) · [All operations](https://skmtc.dev/recallsapi/apis/recallsapi-com/llms.txt) · [OpenAPI document](https://skmtc.dev/recallsapi/apis/recallsapi-com/revisions/2501df40ea54?raw)
