# Get a payable's evidence

`GET /api/v1/invoices/{id}/evidence`

Why a payable was paid, or why it is not paid yet, as one signed document: the evidence chain its evidence page shows, from what was agreed to the signatures. Each fact is labelled by how it is known and cites the ledger entries it rests on, and every one of those entries is carried in full with the workspace's public keys, so each can be checked offline with the SDK's `verifyEvidence`. It is the file the page's Download evidence gives, in the format `vestiarion-evidence/1`, with members named by user id, never by email.

A receivable, or an id this workspace does not hold, including another workspace's, answers `404`. Each call reads the transaction on its chain and checks the links people gave, so the evidence reads have a limit of their own per key. Text that came from outside, such as a vendor's name, an invoice number or a memo, is carried as data.

Send a [workspace API key](https://www.vestiarion.xyz/docs/get-started/authentication) as `Authorization: Bearer <key>`.

## Parameters

| Name | In | Type | Required | Default | Allowed values | Description |
| --- | --- | --- | --- | --- | --- | --- |
| `id` | path | string | Required | — | — | The payable's id, as `GET /api/v1/invoices` lists it. |

## Code samples

```bash
curl "https://www.vestiarion.xyz/api/v1/invoices/<id>/evidence" \
  -H "Authorization: Bearer $VESTIARION_API_KEY"
```

## Response

Example, `200` `application/json`:

```json
{
  "data": {
    "format": "vestiarion-evidence/1",
    "exportedAt": "2026-10-25T09:00:00.000Z",
    "workspace": {
      "slug": "northstar-studio",
      "name": "Northstar Studio"
    },
    "network": {
      "id": "arc-testnet",
      "label": "Arc testnet"
    },
    "subject": {
      "kind": "invoice",
      "id": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e51",
      "title": "October catalogue print run",
      "payee": "Harbor Print Co.",
      "amount": 1250,
      "paidAmount": null,
      "currency": "USDC",
      "status": "paid",
      "paid": true,
      "closed": false,
      "simulated": false,
      "onChain": true
    },
    "labels": {
      "checked": {
        "words": "Checked by code",
        "meaning": "A rule Vestiarion runs computed it: the three-way match, the guardrails, a signature, the written policy.",
        "facts": 4
      },
      "verified": {
        "words": "Verified outside",
        "meaning": "Someone outside Vestiarion answered: the chain's record of the transaction, GitHub, the screening service.",
        "facts": 2
      },
      "stated": {
        "words": "Stated by a person",
        "meaning": "A member or the payee entered it. The page names who, and when.",
        "facts": 7
      },
      "inferred": {
        "words": "Inferred",
        "meaning": "Read, not recorded: the model's judgement, sample data, or a setting as it is today.",
        "facts": 1
      },
      "missing": {
        "words": "Missing",
        "meaning": "Nothing records it. Where it can still be added, the page says how.",
        "facts": 0
      },
      "unreachable": {
        "words": "Could not open",
        "meaning": "A check got no answer, or a link can't be opened (deleted, private, refused or expired): it never counts as verified.",
        "facts": 0
      },
      "contradicted": {
        "words": "Does not match",
        "meaning": "A check answered, and its answer contradicts the record.",
        "facts": 0
      }
    },
    "steps": [
      {
        "id": "agreed",
        "title": "What was agreed",
        "label": "Stated by a person",
        "kind": "stated",
        "facts": [
          {
            "label": "Stated by a person",
            "kind": "stated",
            "text": "Purchase order PO-1187 is on the bill.",
            "who": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b01",
            "at": "2026-10-03T10:00:00.000Z",
            "entries": [
              5607
            ]
          }
        ]
      },
      {
        "id": "delivered",
        "title": "What was delivered",
        "label": "Stated by a person",
        "kind": "stated",
        "facts": [
          {
            "label": "Stated by a person",
            "kind": "stated",
            "text": "The goods or services are marked received.",
            "who": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b01",
            "at": "2026-10-03T10:00:00.000Z",
            "entries": [
              5607
            ]
          }
        ]
      },
      {
        "id": "bill",
        "title": "The bill",
        "label": "Stated by a person",
        "kind": "stated",
        "facts": [
          {
            "label": "Stated by a person",
            "kind": "stated",
            "text": "1,250.00 USDC, read from a PDF by Claude, then added on Bills & receivables by the person who checked it.",
            "who": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b01",
            "at": "2026-10-03T10:00:00.000Z",
            "notes": [
              "The document's SHA-256 is e32253322f3ee8aebb662b9ee42946b3d6b0141da8fc66cddf85ec61e12d0252; the document itself is not kept."
            ],
            "entries": [
              5607
            ]
          }
        ]
      },
      {
        "id": "payee",
        "title": "The payee",
        "label": "Stated by a person",
        "kind": "stated",
        "facts": [
          {
            "label": "Stated by a person",
            "kind": "stated",
            "text": "0x8c4f…cbba was given on Counterparties.",
            "who": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b01",
            "at": "2026-10-02T09:00:00.000Z",
            "entries": [
              5605
            ]
          },
          {
            "label": "Stated by a person",
            "kind": "stated",
            "text": "The address was confirmed on Counterparties.",
            "who": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02",
            "at": "2026-10-02T09:40:00.000Z",
            "entries": [
              5606
            ]
          },
          {
            "label": "Verified outside",
            "kind": "verified",
            "text": "Harbor Print Co. was screened clear by OpenSanctions.",
            "who": null,
            "at": "2026-10-01T08:21:00.000Z",
            "entries": []
          }
        ]
      },
      {
        "id": "decision",
        "title": "The decision",
        "label": "Inferred",
        "kind": "inferred",
        "facts": [
          {
            "label": "Inferred",
            "kind": "inferred",
            "text": "Claude decided to hold it for a person, as the written policy would.",
            "who": null,
            "at": "2026-10-03T10:01:00.000Z",
            "notes": [
              "The model's judgement, from the facts it was given."
            ],
            "entries": [
              5608
            ]
          },
          {
            "label": "Checked by code",
            "kind": "checked",
            "text": "Code refused it before anything was sent.",
            "who": null,
            "at": "2026-10-03T10:01:00.000Z",
            "notes": [
              "✓ Purchase order PO-1187 on file and the goods received",
              "✓ Counterparty screened clear",
              "✓ 1,250.00 USDC within its 2,000.00 USDC limit",
              "✓ No duplicate found",
              "✗ Code refused it before anything was sent: workspace.two_approvals"
            ],
            "warn": true,
            "entries": [
              5608
            ]
          }
        ]
      },
      {
        "id": "people",
        "title": "People",
        "label": "Stated by a person",
        "kind": "stated",
        "facts": [
          {
            "label": "Stated by a person",
            "kind": "stated",
            "text": "Gave the first of two approvals.",
            "who": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b03",
            "at": "2026-10-03T14:00:00.000Z",
            "entries": [
              5609
            ]
          },
          {
            "label": "Stated by a person",
            "kind": "stated",
            "text": "Approved and paid it.",
            "who": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02",
            "at": "2026-10-03T15:20:00.000Z",
            "notes": [
              "Approved by 4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b03 on Oct 3, 2026, 14:00 UTC",
              "Approved by 4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02 on Oct 3, 2026, 15:20 UTC"
            ],
            "entries": [
              5610
            ]
          }
        ]
      },
      {
        "id": "payment",
        "title": "The payment",
        "label": "Checked by code",
        "kind": "checked",
        "facts": [
          {
            "label": "Verified outside",
            "kind": "verified",
            "text": "Paid 1,250.00 USDC to 0x8c4f…cbba on Arc testnet.",
            "who": null,
            "at": "2026-10-03T15:20:06.000Z",
            "notes": [
              "Block 4210331 on Arc testnet holds a transfer of 1,250.00 USDC to the payee in this transaction."
            ],
            "link": {
              "href": "https://explorer.testnet.arc.io/tx/0x51713792df8660fed8ab6328e9b5023d1d80dcc566e5512abdcd7ef4eb1b92be",
              "label": "The transaction",
              "state": "checked"
            },
            "entries": []
          },
          {
            "label": "Checked by code",
            "kind": "checked",
            "text": "Entry #5610 records this transaction.",
            "who": null,
            "at": "2026-10-03T15:20:00.000Z",
            "entries": [
              5610
            ]
          }
        ]
      },
      {
        "id": "receipt",
        "title": "The receipt",
        "label": "Checked by code",
        "kind": "checked",
        "facts": [
          {
            "label": "Checked by code",
            "kind": "checked",
            "text": "Shared. Its signed entry verifies and names entry #5610, which records this transaction.",
            "who": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02",
            "at": "2026-10-04T09:00:00.000Z",
            "notes": [
              "Its link was shown once, to the person who shared it, and opens a public page anyone can check."
            ],
            "entries": [
              5612,
              5610
            ]
          }
        ]
      },
      {
        "id": "signatures",
        "title": "Signatures",
        "label": "Checked by code",
        "kind": "checked",
        "caveat": "A signed entry proves who recorded what, and when. It does not prove the goods were good or the work was done.",
        "facts": [
          {
            "label": "Checked by code",
            "kind": "checked",
            "text": "7 entries verify: each is signed with the workspace's key, and its hash follows from its content, its signature and the hash before it.",
            "who": null,
            "at": null,
            "notes": [
              "The Audit log checks the whole chain, entry after entry."
            ],
            "entries": [
              5605,
              5606,
              5607,
              5608,
              5609,
              5610,
              5612
            ]
          }
        ]
      }
    ],
    "signedEntryProves": "A signed entry proves who recorded what, and when. It does not prove the goods were good or the work was done.",
    "checkAnEntry": [
      "body_hash = sha256(canonical JSON of { actor, domain, action, summary, detail }, keys sorted)",
      "signature = Ed25519 over the 32 bytes of body_hash, by the key signing_key_id names",
      "hash = sha256(prev_hash || body_hash || signature), the hex strings joined"
    ],
    "keys": [
      {
        "id": "36e3209ae2e6a600",
        "status": "active",
        "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAhXbIpeLpKB5bbwxtRVDFBlWIDaY3sitQ9KiQ0xCR7No=\n-----END PUBLIC KEY-----\n"
      }
    ],
    "entries": [
      {
        "seq": 5605,
        "id": "2ebe4be1-9898-4a8a-a182-166563617e2c",
        "ts": "2026-10-02T09:00:00.000Z",
        "actor": "human",
        "domain": "compliance",
        "action": "counterparty_address_changed",
        "summary": "Changed Harbor Print Co.'s payout address",
        "detail": {
          "by": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b01",
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c01",
          "from": "0x5a1b2c3d4e5f60718293a4b5c6d7e8f901234567",
          "to": "0x8c4f2e1d0b9a87766554433221100ffeeddccbba",
          "chain": "ARC-TESTNET"
        },
        "body_hash": "32deece8f6598ac091688f95cc7650bf4b024509accc6c8bc08d02c24fbc7f8c",
        "signature": "118fa4acab75d62884243ec3aa11a1069e3a3c8b7446d92b2b212515e89743e64bf7203888218494ca1576cf3f8346a2859853d060ce522881150f0f5b9dd505",
        "prev_hash": "7890fd259c2a528efe9e2a57ff9b2d79385a4e7a684bcd2b12a1f93de96853d9",
        "hash": "5a4e61f31d16b7c1c873867f7a2b4756deb63d9d2624a6892ef1340b3ed3ae89",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      },
      {
        "seq": 5606,
        "id": "386d19ec-b651-485a-9fcc-6dc7f3979a15",
        "ts": "2026-10-02T09:40:00.000Z",
        "actor": "human",
        "domain": "compliance",
        "action": "counterparty_address_confirmed",
        "summary": "Confirmed Harbor Print Co.'s new payout address",
        "detail": {
          "by": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02",
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c01",
          "address": "0x8c4f2e1d0b9a87766554433221100ffeeddccbba",
          "chain": "ARC-TESTNET",
          "via": "confirm",
          "verification": {
            "method": "call",
            "contact": "Harbor Print's accounts line, from the vendor file",
            "contactOnFileBefore": true,
            "note": "Read back the new address on the call."
          },
          "payeeLock": {
            "coolingHours": 24
          }
        },
        "body_hash": "7c040055d7b5699ea69746fd510b4a6870b8b62f40c989c82e070f5bee081482",
        "signature": "9d4c736dcab1e695a202ca4d879346525d786ffb9937d4e4897c4ab212a8767240341e79e31028d15744b046fbfeff9666726576f1fac3df5ccbde06e9727301",
        "prev_hash": "5a4e61f31d16b7c1c873867f7a2b4756deb63d9d2624a6892ef1340b3ed3ae89",
        "hash": "ecedf7e736213c37131c6f2fdf3f5dae528f9d5b687b08122e9a6335dbcce355",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      },
      {
        "seq": 5607,
        "id": "5de39c47-b242-47eb-a130-2507bbed570c",
        "ts": "2026-10-03T10:00:00.000Z",
        "actor": "human",
        "domain": "ap",
        "action": "create_invoice",
        "summary": "Added a bill from Harbor Print Co. for 1250 USDC",
        "detail": {
          "by": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b01",
          "invoiceId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e51",
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c01",
          "counterpartyName": "Harbor Print Co.",
          "amount": 1250,
          "currency": "USDC",
          "dueDate": "2026-10-20",
          "poReference": "PO-1187",
          "goodsReceived": true,
          "invoiceNumber": "HP-2026-0412",
          "document": {
            "kind": "pdf",
            "reader": "anthropic",
            "sha256": "e32253322f3ee8aebb662b9ee42946b3d6b0141da8fc66cddf85ec61e12d0252"
          }
        },
        "body_hash": "6c61a8524fad3add846231b1b10dd84aa9e9ab6294c2768f6d81bd3d0b8c5680",
        "signature": "8d3e9041ed41b198745e104251cec68b6a498a35ac2ef01cd0a975c8cc9f9381bf2821fe83edd5f3f4802e07e8957574f85c5ee843a6e84f0eefa0169b90630c",
        "prev_hash": "ecedf7e736213c37131c6f2fdf3f5dae528f9d5b687b08122e9a6335dbcce355",
        "hash": "199d4e27b5e16792511e46cd55e8fee83ef76fc053e047b10c7de190fd8e740a",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      },
      {
        "seq": 5608,
        "id": "0ce02bf7-374c-4fb6-84c2-0166c9f1ff82",
        "ts": "2026-10-03T10:01:00.000Z",
        "actor": "agent",
        "domain": "ap",
        "action": "ap_hold",
        "summary": "Held 1250 USDC to Harbor Print Co. for two approvals",
        "detail": {
          "invoiceId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e51",
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c01",
          "decision": {
            "action": "hold"
          },
          "decisionMode": "anthropic",
          "agreedWithReference": true,
          "guardrailBlocked": true,
          "guardrailRule": "workspace.two_approvals",
          "currency": "USDC",
          "observed": {
            "amount": 1250,
            "paymentLimit": 2000,
            "riskLevel": "clear",
            "poReference": "PO-1187",
            "goodsReceived": true,
            "purchaseOrderRequired": true,
            "twoApprovalsAbove": 1000,
            "duplicateCheck": {
              "matchesTotal": 0
            }
          },
          "execution": {
            "txRef": null,
            "resultingStatus": "held",
            "heldBecause": "workspace.two_approvals"
          }
        },
        "body_hash": "c07c1ba045c308aeb910895f5a6bb782d263e15272d1d28339396ec008382f83",
        "signature": "7aa3967f9c3f52719dfa8e16560f3d7dd1419ea15534de8b817cabb475ec1ea9904ec13920d755fb9040a7c8efc7b7e47389953fbcf83cfef675ae3ef7187d09",
        "prev_hash": "199d4e27b5e16792511e46cd55e8fee83ef76fc053e047b10c7de190fd8e740a",
        "hash": "c1748b31d24cd308c9d9d8a252fc03cfe972c95086235a3297a7d03e7834119d",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      },
      {
        "seq": 5609,
        "id": "b25a0a4d-2154-4a99-9bae-547345b3d082",
        "ts": "2026-10-03T14:00:00.000Z",
        "actor": "human",
        "domain": "ap",
        "action": "approval_given",
        "summary": "Co-signed 1250 USDC to Harbor Print Co.; an owner, admin or approver's approval pays it (payments above 1000 USDC need two)",
        "detail": {
          "by": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b03",
          "invoiceId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e51",
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c01",
          "amount": 1250,
          "currency": "USDC",
          "address": "0x8c4f2e1d0b9a87766554433221100ffeeddccbba",
          "twoApprovalsAbove": 1000,
          "cosign": true
        },
        "body_hash": "4bef2a60c1877a389424b70010085956e2cd5fcdb869a9da181df759e18d8236",
        "signature": "2a5d35e580537d00a24bd0cfba8bdb931c355d2146a811105a11a4b6afe8f291dfad6b0516fd900a08f626470b26cbe045ef72d0cb090160c3c81fbfa531f501",
        "prev_hash": "c1748b31d24cd308c9d9d8a252fc03cfe972c95086235a3297a7d03e7834119d",
        "hash": "87750f493b785c931c8c69551ad76a1418b935eb8d2704a5c0fca19833cf959e",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      },
      {
        "seq": 5610,
        "id": "eab46f04-8b5a-44f1-803b-98e6b0a80f72",
        "ts": "2026-10-03T15:20:00.000Z",
        "actor": "human",
        "domain": "ap",
        "action": "approval_paid",
        "summary": "Approved and paid 1250 USDC to Harbor Print Co.",
        "detail": {
          "by": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02",
          "invoiceId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e51",
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c01",
          "amount": 1250,
          "currency": "USDC",
          "amountPaid": 1250,
          "discountTaken": 0,
          "overrode": "held",
          "txRef": "0x51713792df8660fed8ab6328e9b5023d1d80dcc566e5512abdcd7ef4eb1b92be",
          "status": "paid",
          "attempt": 1,
          "firstPayment": true,
          "approvals": [
            {
              "by": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b03",
              "at": "2026-10-03T14:00:00.000Z"
            },
            {
              "by": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02",
              "at": "2026-10-03T15:20:00.000Z"
            }
          ],
          "twoApprovalsAbove": 1000
        },
        "body_hash": "dae21d642023e245c099621bc1a8a1689b0f6d243b62803f464b4e35859c8400",
        "signature": "035c519ac40e1dd2bbc7d70e08180b0e624cbc16df3b3a74c2a609c40c26cbe04f0d2a28bb01edbe1f0c0f5c9a52c76127f2c4affc71f7ae0fcdeac82f32b60b",
        "prev_hash": "87750f493b785c931c8c69551ad76a1418b935eb8d2704a5c0fca19833cf959e",
        "hash": "1bd91f4c85872fe824fc18dfb7409f1ce3bbe63728fe993d070a4e14ef03c070",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      },
      {
        "seq": 5612,
        "id": "33e7453e-1c5e-47b4-9d75-b2444045656d",
        "ts": "2026-10-04T09:00:00.000Z",
        "actor": "human",
        "domain": "ap",
        "action": "receipt_shared",
        "summary": "Receipt: 1250 USDC paid on Arc testnet",
        "detail": {
          "receipt": {
            "amount": 1250,
            "token": "USDC",
            "paidAt": "2026-10-03T15:20:06.000Z",
            "payee": "0x8c4f2e1d0b9a87766554433221100ffeeddccbba",
            "chain": "ARC-TESTNET",
            "txHash": "0x51713792df8660fed8ab6328e9b5023d1d80dcc566e5512abdcd7ef4eb1b92be",
            "route": "direct",
            "invoiceNumber": "HP-2026-0412",
            "feesPaidBy": "sender"
          },
          "records": {
            "seq": 5610,
            "hash": "1bd91f4c85872fe824fc18dfb7409f1ce3bbe63728fe993d070a4e14ef03c070"
          }
        },
        "body_hash": "51ed22303181009c5ae6edfffda627d61365f3688187cd106dc4dc774bc0b9bc",
        "signature": "7c119a4807056a07dd11ff42f36e4333b8b31182df148388a15479a7cc8ce8cbffe483133de7c3d07981bba1506af73a23404a973343ec66180d5abf18556001",
        "prev_hash": "655b287db5c7d17fdf9f87425bd3a434555a89ea8dbc71125b319d7569dfd785",
        "hash": "b2687ac1ce1ae6f949ccd43e446e22fe7b36dc6dda1eebaa66d40afdca2fba81",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      }
    ]
  }
}
```

**Fields**

- `data` (object, required): One payable's or milestone's evidence, `vestiarion-evidence/1`: the chain its evidence page shows, each fact citing the signed entries it rests on, which it carries in full.
  - `format` (string, required) One of `vestiarion-evidence/1`.
  - `exportedAt` (string, required)
  - `workspace` (object, required): The workspace the document is of.
    - `slug` (string, required)
    - `name` (string, required)
  - `network` (object, required): The workspace's network.
    - `id` (string, required) One of `arc-testnet`, `arc-mainnet`.
    - `label` (string, required): The network's name, as the workspace's pages write it.
  - `subject` (object, required): The payable or milestone the evidence is of.
    - `kind` (string, required) One of `invoice`, `milestone`.
    - `id` (string, required)
    - `title` (string, required)
    - `payee` (string, required)
    - `amount` (number, required): The bill's or the milestone's amount.
    - `paidAmount` (number, nullable, required): What was paid, when an early-payment discount took part of the bill off; null when the whole amount was paid, and for anything not paid.
    - `currency` (string, required)
    - `status` (string, required)
    - `paid` (boolean, required)
    - `closed` (boolean, required): Rejected by a person, or closed without paying: it will not be paid.
    - `simulated` (boolean, required): Marked paid by a simulated transfer: nothing moved on chain.
    - `onChain` (boolean, required): Paid by a transaction on chain the chain shows.
  - `labels` (object, required): The seven words a fact is labelled with, what each means, and how many facts each holds.
  - `steps` (array of object, required)
    - `id` (string, required) One of `agreed`, `delivered`, `bill`, `payee`, `decision`, `people`, `payment`, `books`, `receipt`, `signatures`.
    - `title` (string, required)
    - `label` (string, required): The step's label in words.
    - `kind` (string, required) One of `checked`, `verified`, `stated`, `inferred`, `missing`, `unreachable`, `contradicted`.
    - `caveat` (string, optional)
    - `facts` (array of object, required)
      - `label` (string, required): The fact's label in words.
      - `kind` (string, required) One of `checked`, `verified`, `stated`, `inferred`, `missing`, `unreachable`, `contradicted`.
      - `text` (string, required)
      - `who` (string, nullable, required): Who stated it: a member by user id, "a former member", "a member" when the members could not be read, "the payee", "@<login> on GitHub" for a GitHub bounty; null when the ledger names no one.
      - `at` (string, nullable, required)
      - `fill` (string, optional): For a missing fact: what would fill it.
      - `notes` (array of string, optional)
      - `link` (object, optional): A link a fact points to, and what its check found.
        - `href` (string, required)
        - `label` (string, required)
        - `state` (string, required) One of `checked`, `not_opened`, `unreachable`, `contradicted`, `cannot_open`.
        - `reason` (string, optional)
        - `given` (boolean, optional): A link a person, a payee or GitHub gave, rather than one Vestiarion built. One of `true`.
      - `warn` (boolean, optional): What it says is bad news, however well it is known. One of `true`.
      - `entries` (array of integer, required): The signed entries it rests on, by `seq`.
  - `signedEntryProves` (string, required): What a signed entry proves, and what it does not.
  - `checkAnEntry` (array of string, required): How to check one entry alone: its body hash, its signature and its chain hash.
  - `keys` (array of object, required): The workspace's public keys, active and retired, each under its id: what the entries were signed with.
    - `id` (string, required): The first 16 hex characters of the SHA-256 of the key's public SPKI: a key counts only under this id.
    - `status` (string, required) One of `active`, `retired`.
    - `publicKeyPem` (string, required)
  - `entries` (array of object, required): Every entry the document cites, oldest first, in full, each with the server's check.
    - `seq` (integer, required)
    - `id` (string, nullable, required)
    - `ts` (string, required)
    - `actor` (string, required)
    - `domain` (string, required)
    - `action` (string, required)
    - `summary` (string, required)
    - `detail` (object, required)
    - `body_hash` (string, required)
    - `signature` (string, required)
    - `prev_hash` (string, required)
    - `hash` (string, required)
    - `signing_key_id` (string, nullable, required)
    - `check` (any, nullable, required): The server's check of this entry alone. A checker re-checks it rather than trust this field.

## Errors

| Status | Code | When |
| --- | --- | --- |
| 401 | `unauthorized` | No key, or a malformed, unknown or revoked one: "A valid API key is required." |
| 403 | `forbidden` | The key's scopes do not cover this route: "This key cannot do that." Or, on a write, the person who created the key can no longer add records: "This key's issuer can no longer add records in this workspace." |
| 404 | `not_found` | The requested resource does not exist in the key's workspace. |
| 429 | `rate_limited` | Too many requests; wait as long as `Retry-After` says before trying again. |
| 500 | `internal` | An unexpected server error. Implementation details are not exposed. |
