# Seals

> A seal freezes a document and its record at a short link anyone can open and check.

A **seal** is a snapshot of a document as it stands, with everything Proof recorded about how it was written, at a short link such as `https://proof.exalto.ai/AH271NSHS`. Your users copy the text wherever it's going and send the link with it. Anyone can open the link and see where the words came from, without an account on your platform or ours, unless the document's owners made its seals [private](#who-reads-it).

## What sealing captures

- **The text**, read-only, with its images, as it stood at that moment. A document with pending suggestions can't be sealed until they're accepted or rejected.
- **The numbers**: the four [origins](/concepts/provenance/) as shares of the text, [Presence](/concepts/presence-and-check-ins/) and how much of it was verified, prompts, sittings and time, frozen under the method of the day.
- **The record behind them**: who did what, agent reads and edits, the sittings on a timeline, and which signals were on.
- **The names** people had when it was sealed. Later name changes don't reach it.
- **Who vouches for identity**: your platform's name and the ids of the keys that started the writing sessions.

An owner seals, from the editor's Seal button or with `POST /v1/documents/{id}/seals`. Proof sends a `seal.created` event either way.

## Versions

Sealing never stops the writing. People keep editing after they seal, and sealing again makes a new seal with its own code and the next version number. Each seal's link always shows the version it was made from. When a newer seal of the same document exists, the page says so and links to it.

A seal can't be changed. If the text needs fixing, edit and seal again.

## The seal line

Every seal has one line of text that sums it up, made for pasting under the work it travels with:

```text
proof.exalto.ai/AH271NSHS · 87% typed/shaped · 8% AI · 5% external · 4 prompts · 2 sessions, 1hr48min
```

| Part | Meaning |
| --- | --- |
| `87% typed/shaped` | Typed and Shaped together: what people wrote or reworked. |
| `8% AI` | Agent text kept as written. |
| `5% external` | Pasted or imported text of unknown origin. |
| `4 prompts` | Rounds of back-and-forth between people and agents. |
| `2 sessions, 1hr48min` | Sittings, and their total time. |

When check-ins verified every sitting people wrote in, the line ends `(verified)`; when they verified some, it ends with the share, such as `(73% verified)`. There is no overall score: readers see each part.

The seal object returns the line ready to use, in `line`.

## The method

The rules that turn a record into numbers are versioned, and each seal keeps the version it was made under, such as `v0.2`. When the method improves, sealed numbers don't change. The seal page shows a reading under the newer method beside the original, labelled as such, and `GET /v1/documents/{id}/provenance` always returns the reading under the current method.

## The seal page

`proof.exalto.ai/{code}` is hosted by Proof, on our domain, so that what it shows can't be edited by anyone who wrote the document or by the platform it was written in. It shows:

- the text and the seal, with its breakdown one click away;
- "Written in Acme Notes", with your platform's name from the console;
- that Acme Notes vouches for who the writers are, and which keys started their sessions.

Shared on the web, a public seal's link unfurls into a preview image with the title, who wrote it, the seal and the seal line.

## Who reads it

A document's owners choose, in the editor's seal dialog, who reads its seals, every version alike:

- **Anyone with the link**, the default.
- **Private**: the document's members, readers they name by email or as `*@domain`, and whoever has the password, if they set one. Readers prove who they are by signing in with your platform, which vouches for their verified email with a [reader request](/reference/api/seals/#reader-requests). A private seal has no link preview.

## Withdrawing

An owner can withdraw a seal with `DELETE /v1/seals/{code}`. Its page then says it was withdrawn, and nothing else; the link keeps answering so that anyone who has it learns why. Deleting a document withdraws all its seals. While a document is in its owners' trash, its seals are down, and come back if it's restored.

## Test seals

Seals made with test keys have codes beginning with `T`, such as `TQ4R82KMW`, and their pages say "Test seal" across the top. They work like live seals in every other way, so you can build and check your flow end to end.

## The seal object

```json
{
  "code": "AH271NSHS",
  "url": "https://proof.exalto.ai/AH271NSHS",
  "document": "doc_8Hq2Lm4R",
  "version": 3,
  "sealed_at": "2026-10-13T23:31:00Z",
  "sealed_by": "usr_5Kq2Lm8R",
  "method": "v0.2",
  "line": "proof.exalto.ai/AH271NSHS · 87% typed/shaped · 8% AI · 5% external · 4 prompts · 2 sessions, 1hr48min",
  "composition": { "typed": 71, "shaped": 16, "ai": 8, "external": 5 },
  "presence": { "share": 97, "verified_share": 0, "verified": false },
  "prompts": 4,
  "sittings": 2,
  "duration": "1hr48min",
  "attested_by": { "platform": "acme", "key_ids": ["key_3Fq9"] },
  "withdrawn_at": null
}
```

## Related

- [Seal and verify](/guides/seal-and-verify/)
- [Seals reference](/reference/api/seals/)
- [Trust model](/concepts/trust-model/)