# Proof

URL: /business/nouns/proof · Id: `noun:proof`

> A Proof is the sealed result of one Control test: the Events it read, the root it checked them against, and every exception.

A Proof is the sealed result of one [Control](/business/nouns/control) test: the [Events](/business/nouns/event) it read, the root it checked them against, and every exception.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `control` | [Control](/business/nouns/control) | Yes | The Control whose test ran. |
| `namespace` | `string` | Yes | The Startup, Studio, or platform namespace the test read. |
| `from` | `datetime` | Yes | The start of the range tested. |
| `to` | `datetime` | Yes | The end of the range tested. |
| `root` | `string` | Yes | The published log root the selected Events roll up to. |
| `count` | `integer` | Yes | How many Events the test read. |
| `exceptions` | `integer` | Yes | How many failed the assertion; each opens an Issue. |

## Object
```json
{
  "$id": "https://api.sb/kilnbakery.com/proofs/proof_1",
  "$type": "Proof",
  "control": "control_1",
  "namespace": "Example namespace",
  "from": "2026-10-22T12:00:00Z",
  "to": "2026-10-22T12:00:00Z",
  "root": "Example root",
  "count": 1,
  "exceptions": 1
}
```

## Relationships
- <a id="rel-proves"></a>A Proof **proves** one [Control](/business/nouns/control): the [Control](/business/nouns/control) whose test the Proof records running over a range of [Events](/business/nouns/event). `proves`, inverse [`provenBy`](/business/nouns/control#rel-proven-by).
- <a id="rel-relied-on-by"></a>A Proof **is relied on by** many [Audits](/business/nouns/audit): the Proofs the auditing firm samples across the report period. `reliedOnBy`, inverse [`reliesOn`](/business/nouns/audit#rel-relies-on).

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| <a id="get"></a>[Proof.get](/business/nouns/proof/get) | Returns one Proof by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[Proof.list](/business/nouns/proof/list) | Returns Proofs, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |

A Proof is kept forever and never edited: it has no `update` or `delete`.

## Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.

| Operation | `owner` | `admin` | `member` | `viewer` |
| --- | --- | --- | --- | --- |
| `Proof.get` | Yes | Yes | Yes | Yes |
| `Proof.list` | Yes | Yes | Yes | Yes |

## Call it

**Ask**

```text
Show me the latest proof.
```

**API**

```bash
curl https://api.sb/quietcopy.com/proofs/proof_1 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

```json
{
  "api": "https://api.sb/quietcopy.com",
  "$type": "Proof",
  "$id": "https://api.sb/quietcopy.com/proofs/proof_1",
  "proof": {
    "$id": "https://api.sb/quietcopy.com/proofs/proof_1",
    "$type": "Proof",
    "control": "control_1",
    "namespace": "Example namespace",
    "from": "2026-10-22T12:00:00Z",
    "to": "2026-10-22T12:00:00Z"
  },
  "links": {
    "self": "https://api.sb/quietcopy.com/proofs/proof_1",
    "up": "https://api.sb/quietcopy.com/proofs"
  }
}
```

**SDK**

```ts
import { $ } from 'startup-builder'

const proof = await $.Proof.get({ id: 'proof_1' })
```

**CLI**

```bash
npx startup-builder do Proof.get --json '{"id":"proof_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Proof.get({ id: 'proof_1' })"
  }
}
```

## Example
Each night, the [Permission decay](/systems/trust-and-governance/controls/permission-decay) test for a recipe planner reads 4,812 [Events](/business/nouns/event). It finds 0 exceptions and seals a Proof citing the published root.