> ## Documentation Index
> Fetch the complete documentation index at: https://docs.proofable.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Proofs

> Keep a reusable record of what was verified. Read it, share it, reuse it, revoke it, or verify a portable proof outside Proofable.

A proof is the saved result of a completed check, permission, or action. Store its proof ID, then read its current status whenever a decision depends on it.

## What a proof records

What was checked, who or what it describes, the outcome, who issued it, its current status and expiry, its visibility, and any scope needed to evaluate it.

Outcome and status are separate. A proof that passed earlier never overrides expiry or revocation.

A **receipt** is the same kind of record for a completed action, payment, or job run.

## Proof ID

The API field for the proof ID is `qHash`. Store it with the user or record it belongs to.

`contentHash` identifies the checked content or file. It is not the proof ID.

## Read a proof

| From      | How                                                                                      |
| --------- | ---------------------------------------------------------------------------------------- |
| A browser | `https://proofable.me/proof/{qHash}`                                                     |
| The SDK   | `client.getProof(qHash)`, or `client.getPrivateProof(qHash, wallet)` for a private proof |
| The API   | `GET https://api.proofable.me/api/v1/proofs/{qHash}`                                     |
| MCP       | `proofable_proofs_get`                                                                   |

## Visibility

| Mode     | `privacyLevel` | `publicDisplay` | Who can read it                                       |
| -------- | -------------- | --------------- | ----------------------------------------------------- |
| Private  | `private`      | `false`         | The owner, and anyone they grant access. The default. |
| Unlisted | `public`       | `false`         | Anyone with the proof ID. Not listed.                 |
| Listed   | `public`       | `true`          | Anyone. Discoverable.                                 |

Unlisted proofs are public to anyone who has the proof ID. To share a private proof without making it public, create a signed access grant with `POST /api/v1/verification/access/grant`.

`client.verify()` and `VerifyGate` create private proofs unless you choose otherwise.

## Storage

Proofs are stored offchain by default. A blockchain record is optional: request it with `options.publishToHub: true` or `targetChains`. IPFS pinning is optional with `enableIpfs: true`. Neither changes who can read the proof, and neither replaces a status check.

## Reuse

Before a protected action, check the current proof instead of repeating the original check. [Reuse verification](/use-cases/reuse-verification)

## Revoke

```js theme={"dark"}
await client.revokeOwnProof(qHash, wallet);
```

Or call `POST /api/v1/proofs/revoke-self/{qHash}`. A revoked proof stops satisfying any gate.

## Portable proofs

Wallet-signed requests return a portable envelope another system can check without calling Proofable:

```js theme={"dark"}
import { verifyPortableProofEnvelope } from '@proofable/sdk';

const result = await verifyPortableProofEnvelope(envelope);
if (!result.valid) throw new Error(result.errors.join('; '));
```

The envelope proves who signed the request. Current status still comes from Proofable. [Portable Proof](/learn/standards/caip-380)

## Guides

<CardGroup cols={2}>
  <Card title="Proof lifecycle" icon="rotate" href="/verification/lifecycle">
    Status, freshness, and revocation.
  </Card>

  <Card title="Link and version proofs" icon="link" href="/learn/proof-links">
    Typed links and version chains.
  </Card>
</CardGroup>
