# Get a monthly close pack

`GET /api/v1/close-packs/{month}`

Every payment settled in a calendar month (UTC), one row each: the bill with its invoice number and its document's SHA-256, who decided and approved it, what was checked, the transaction, the books, and the signed entry that records it; then the payments not settled in the month and the escrow moves, apart, totals per token, and every cited entry in full with the workspace's public keys. The format is `vestiarion-close-pack/1`, the file the Monthly close pack page's Download signed JSON gives, with members named by user id.

`month` is `YYYY-MM`. This month is allowed, and reads so far: `month.ended` is `false`. A month still to come, or one before 2020, answers `400`, as does a month whose answer would be over 4 MB: download that one from the workspace. A month of more than 2,000 payments is cut at 2,000 and says so in `cut`. Reading it records nothing in the ledger. 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 |
| --- | --- | --- | --- | --- | --- | --- |
| `month` | path | string | Required | — | — | The month, as `YYYY-MM`: a calendar month in UTC. |

## Code samples

```bash
curl "https://www.vestiarion.xyz/api/v1/close-packs/<month>" \
  -H "Authorization: Bearer $VESTIARION_API_KEY"
```

## Response

Example, `200` `application/json`:

```json
{
  "data": {
    "format": "vestiarion-close-pack/1",
    "exportedAt": "2026-10-25T09:00:00.000Z",
    "workspace": {
      "slug": "northstar-studio",
      "name": "Northstar Studio"
    },
    "network": {
      "id": "arc-testnet",
      "label": "Arc testnet"
    },
    "month": {
      "from": "2026-10-01",
      "to": "2026-11-01",
      "label": "October 2026",
      "key": "2026-10",
      "ended": false
    },
    "ledgerHead": {
      "seq": 5618,
      "hash": "d24bfd6b9277f9a31e8ac125531af4c9f3209f12534561425fa45d313e24e55c"
    },
    "cut": false,
    "unread": [],
    "totals": {
      "onChain": [
        {
          "token": "USDC",
          "payments": 2,
          "amount": "2050.000000",
          "routeFeesUsdc": "0.000000"
        }
      ],
      "simulated": [],
      "shadow": 0,
      "notSettled": {
        "in_flight": 1
      },
      "withoutBill": 0,
      "entries": {
        "cited": 11,
        "verified": 11,
        "failed": 0,
        "unchecked": 0
      }
    },
    "rows": [
      {
        "paymentId": "c5d6e7f8-0a1b-4c2d-8e3f-4a5b6c7d8e01",
        "source": {
          "kind": "invoice",
          "id": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e51"
        },
        "paidAt": "2026-10-03T15:20:06.000Z",
        "sentAt": "2026-10-03T15:20:01.000Z",
        "amount": "1250.000000",
        "token": "USDC",
        "discount": null,
        "simulated": false,
        "shadow": false,
        "payee": {
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c01",
          "name": "Harbor Print Co.",
          "address": "0x8c4f2e1d0b9a87766554433221100ffeeddccbba",
          "bank": null
        },
        "bill": {
          "kind": "invoice",
          "id": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e51",
          "number": "HP-2026-0412",
          "amount": "1250.000000",
          "currency": "USDC",
          "written": null,
          "dueDate": "2026-10-20",
          "poReference": "PO-1187",
          "memo": "October catalogue print run",
          "document": {
            "sha256": "e32253322f3ee8aebb662b9ee42946b3d6b0141da8fc66cddf85ec61e12d0252",
            "kind": "pdf"
          },
          "vendorDocuments": [],
          "entry": 5607
        },
        "approval": {
          "authorizedBy": "two_people",
          "agent": {
            "action": "ap_hold",
            "decider": "Claude",
            "guardrailRule": "workspace.two_approvals",
            "shadow": false,
            "at": "2026-10-03T10:01:00.000Z",
            "entry": 5608
          },
          "approvals": [
            {
              "who": {
                "kind": "member",
                "userId": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b03",
                "email": null,
                "roleNow": "accountant"
              },
              "at": "2026-10-03T14:00:00.000Z",
              "cosign": true,
              "paid": false,
              "via": null,
              "entry": 5609
            },
            {
              "who": {
                "kind": "member",
                "userId": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02",
                "email": null,
                "roleNow": "approver"
              },
              "at": "2026-10-03T15:20:00.000Z",
              "cosign": false,
              "paid": true,
              "via": null,
              "entry": 5610
            }
          ],
          "verdict": null,
          "flags": {
            "soleApprover": false,
            "addressGiverApproved": false,
            "firstPayment": true,
            "fewApprovers": false
          },
          "address": {
            "address": "0x8c4f2e1d0b9a87766554433221100ffeeddccbba",
            "mirror": false,
            "givenBy": {
              "kind": "member",
              "userId": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b01",
              "email": null,
              "roleNow": "owner"
            },
            "givenAt": "2026-10-02T09:00:00.000Z",
            "confirmedBy": {
              "kind": "member",
              "userId": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02",
              "email": null,
              "roleNow": "approver"
            },
            "confirmedAt": "2026-10-02T09:40:00.000Z",
            "confirmedWith": "confirm",
            "secondPerson": true,
            "entries": [
              5605,
              5606
            ]
          }
        },
        "checks": {
          "guardrails": {
            "kind": "checked",
            "text": "The agent held it: it is above the figure where two people approve. A person decided to pay it.",
            "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"
            ],
            "at": "2026-10-03T10:01:00.000Z",
            "entries": [
              5608
            ],
            "warn": false
          },
          "screening": {
            "kind": "verified",
            "text": "Harbor Print Co. was screened clear by OpenSanctions.",
            "notes": [],
            "at": "2026-10-01T08:21:00.000Z",
            "entries": [],
            "warn": false
          },
          "walletList": {
            "kind": "checked",
            "text": "Its payout address was not on OFAC's SDN list when it was paid: every screening and payment checks it.",
            "notes": [],
            "at": "2026-10-03T10:01:00.000Z",
            "entries": [],
            "warn": false
          },
          "payeeLock": {
            "kind": "checked",
            "text": "The payee lock was on when the address was confirmed, with a 24-hour wait. It was sent 30 hours after the address was given.",
            "notes": [],
            "at": "2026-10-02T09:40:00.000Z",
            "entries": [
              5605,
              5606
            ],
            "warn": false
          },
          "payTo": {
            "kind": "checked",
            "text": "The address its document asked to be paid to is the one paid.",
            "notes": [],
            "at": null,
            "entries": [],
            "warn": false
          },
          "milestone": {
            "kind": "not_applicable",
            "text": "A bill has no milestone to verify.",
            "notes": [],
            "at": null,
            "entries": [],
            "warn": false
          }
        },
        "transaction": {
          "route": "direct",
          "txHash": "0x51713792df8660fed8ab6328e9b5023d1d80dcc566e5512abdcd7ef4eb1b92be",
          "chain": "ARC-TESTNET",
          "chainLabel": "Arc testnet",
          "explorerUrl": "https://explorer.testnet.arc.io/tx/0x51713792df8660fed8ab6328e9b5023d1d80dcc566e5512abdcd7ef4eb1b92be",
          "sourceTxHash": null,
          "sourceExplorerUrl": null,
          "simulatedRef": null,
          "note": null,
          "networkFeeUsd": "0.004100",
          "networkFeeSource": "chain_reported",
          "routeFeeUsdc": null,
          "earlierAttempts": 0
        },
        "record": {
          "seq": 5610,
          "action": "approval_paid",
          "ts": "2026-10-03T15:20:00.000Z",
          "hash": "1bd91f4c85872fe824fc18dfb7409f1ce3bbe63728fe993d070a4e14ef03c070",
          "signature": "035c519ac40e1dd2bbc7d70e08180b0e624cbc16df3b3a74c2a609c40c26cbe04f0d2a28bb01edbe1f0c0f5c9a52c76127f2c4affc71f7ae0fcdeac82f32b60b",
          "signingKeyId": "36e3209ae2e6a600",
          "check": {
            "ok": true
          }
        },
        "books": {
          "markedPaid": true,
          "mismatch": null,
          "booked": null
        },
        "evidencePath": "/o/northstar-studio/evidence/invoice/7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e51",
        "entries": [
          5605,
          5606,
          5607,
          5608,
          5609,
          5610
        ],
        "evidenceUrl": "https://www.vestiarion.xyz/o/northstar-studio/evidence/invoice/7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e51"
      },
      {
        "paymentId": "c5d6e7f8-0a1b-4c2d-8e3f-4a5b6c7d8e02",
        "source": {
          "kind": "milestone",
          "id": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4f61"
        },
        "paidAt": "2026-10-08T09:11:06.000Z",
        "sentAt": "2026-10-08T09:11:01.000Z",
        "amount": "800.000000",
        "token": "USDC",
        "discount": null,
        "simulated": false,
        "shadow": false,
        "payee": {
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c02",
          "name": "Lumen Dev",
          "address": "0x3e7d9c1b5a2f4e6d8c0b1a2f3e4d5c6b7a8f9e01",
          "bank": null
        },
        "bill": {
          "kind": "milestone",
          "id": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4f61",
          "title": "Checkout page redesign",
          "amount": "800.000000",
          "currency": "USDC",
          "entry": 5611
        },
        "approval": {
          "authorizedBy": "code",
          "agent": {
            "action": "milestone_release",
            "decider": "Claude",
            "guardrailRule": null,
            "shadow": false,
            "at": "2026-10-08T09:11:00.000Z",
            "entry": 5614
          },
          "approvals": [],
          "verdict": null,
          "flags": {
            "soleApprover": false,
            "addressGiverApproved": false,
            "firstPayment": false,
            "fewApprovers": false
          },
          "address": {
            "address": "0x3e7d9c1b5a2f4e6d8c0b1a2f3e4d5c6b7a8f9e01",
            "mirror": false,
            "givenBy": {
              "kind": "member",
              "userId": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b01",
              "email": null,
              "roleNow": "owner"
            },
            "givenAt": "2026-10-01T08:30:00.000Z",
            "confirmedBy": {
              "kind": "member",
              "userId": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02",
              "email": null,
              "roleNow": "approver"
            },
            "confirmedAt": "2026-10-01T09:05:00.000Z",
            "confirmedWith": "confirm",
            "secondPerson": true,
            "entries": [
              5603,
              5604
            ]
          }
        },
        "checks": {
          "guardrails": {
            "kind": "checked",
            "text": "Code checked it before it was sent.",
            "notes": [
              "✓ Counterparty screened clear",
              "✓ 800.00 USDC within its 1,000.00 USDC limit"
            ],
            "at": "2026-10-08T09:11:00.000Z",
            "entries": [
              5614
            ],
            "warn": false
          },
          "screening": {
            "kind": "verified",
            "text": "Lumen Dev was screened clear by OpenSanctions.",
            "notes": [],
            "at": "2026-10-01T08:21:00.000Z",
            "entries": [],
            "warn": false
          },
          "walletList": {
            "kind": "checked",
            "text": "Its payout address was not on OFAC's SDN list when it was paid: every screening and payment checks it.",
            "notes": [],
            "at": "2026-10-08T09:11:00.000Z",
            "entries": [],
            "warn": false
          },
          "payeeLock": {
            "kind": "checked",
            "text": "The payee lock was on when the address was confirmed, with a 24-hour wait. It was sent 168 hours after the address was given.",
            "notes": [],
            "at": "2026-10-01T09:05:00.000Z",
            "entries": [
              5603,
              5604
            ],
            "warn": false
          },
          "payTo": {
            "kind": "not_applicable",
            "text": "A milestone has no invoice document.",
            "notes": [],
            "at": null,
            "entries": [],
            "warn": false
          },
          "milestone": {
            "kind": "verified",
            "text": "GitHub reported pull request northstar-studio/site#48 merged.",
            "notes": [],
            "at": "2026-10-08T09:00:00.000Z",
            "entries": [
              5613
            ],
            "warn": false
          }
        },
        "transaction": {
          "route": "direct",
          "txHash": "0xaa4864c775958bc6f6fd541460df2a351093dd600e37329351639dd191f2030c",
          "chain": "ARC-TESTNET",
          "chainLabel": "Arc testnet",
          "explorerUrl": "https://explorer.testnet.arc.io/tx/0xaa4864c775958bc6f6fd541460df2a351093dd600e37329351639dd191f2030c",
          "sourceTxHash": null,
          "sourceExplorerUrl": null,
          "simulatedRef": null,
          "note": null,
          "networkFeeUsd": "0.004100",
          "networkFeeSource": "chain_reported",
          "routeFeeUsdc": null,
          "earlierAttempts": 0
        },
        "record": {
          "seq": 5614,
          "action": "milestone_release",
          "ts": "2026-10-08T09:11:00.000Z",
          "hash": "fb8324e5ec87a4b8073032fb05e1d44a2773a714e317a4e5909943d6cc5b1c61",
          "signature": "fbf6d5a4cda2134e5d946f23774303f56c359b60b2006bacb1a37c74ef0c8c83ff3ac20bce50b29ec74756fa41fc8e06fc200b6894d7de8f642d3325dae5a703",
          "signingKeyId": "36e3209ae2e6a600",
          "check": {
            "ok": true
          }
        },
        "books": {
          "markedPaid": true,
          "mismatch": null,
          "booked": null
        },
        "evidencePath": "/o/northstar-studio/evidence/milestone/7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4f61",
        "entries": [
          5603,
          5604,
          5611,
          5613,
          5614
        ],
        "evidenceUrl": "https://www.vestiarion.xyz/o/northstar-studio/evidence/milestone/7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4f61"
      }
    ],
    "notSettled": [
      {
        "paymentId": "c5d6e7f8-0a1b-4c2d-8e3f-4a5b6c7d8e03",
        "source": {
          "kind": "invoice",
          "id": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e52"
        },
        "payee": {
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c03",
          "name": "Quill Paper"
        },
        "amount": "310.000000",
        "token": "USDC",
        "simulated": false,
        "state": "in_flight",
        "sentAt": "2026-10-24T10:01:01.000Z",
        "settledAt": null,
        "reason": "SENT",
        "txHash": null,
        "explorerUrl": null,
        "evidencePath": "/o/northstar-studio/evidence/invoice/7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e52",
        "evidenceUrl": "https://www.vestiarion.xyz/o/northstar-studio/evidence/invoice/7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4e52"
      }
    ],
    "escrow": [],
    "labels": {
      "checked": {
        "words": "Checked by code",
        "meaning": "A rule Vestiarion runs computed it: the three-way match, the guardrails, a signature, the written policy."
      },
      "verified": {
        "words": "Verified outside",
        "meaning": "Someone outside Vestiarion answered: the chain's record of the transaction, GitHub, the screening service."
      },
      "stated": {
        "words": "Stated by a person",
        "meaning": "A member or the payee entered it. The page names who, and when."
      },
      "inferred": {
        "words": "Inferred",
        "meaning": "Read, not recorded: the model's judgement, sample data, or a setting as it is today."
      },
      "missing": {
        "words": "Missing",
        "meaning": "Nothing records it. Where it can still be added, the page says how."
      },
      "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."
      },
      "contradicted": {
        "words": "Does not match",
        "meaning": "A check answered, and its answer contradicts the record."
      },
      "not_applicable": {
        "words": "Does not apply",
        "meaning": "There is nothing of this kind to check for this payment: a bank payout pays no address on chain, and a bill has no milestone."
      }
    },
    "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": 5603,
        "id": "b546c398-0533-46f3-bd08-f4616db95c2c",
        "ts": "2026-10-01T08:30:00.000Z",
        "actor": "human",
        "domain": "compliance",
        "action": "create_counterparty",
        "summary": "Added Lumen Dev as a contractor",
        "detail": {
          "by": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b01",
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c02",
          "name": "Lumen Dev",
          "role": "contractor",
          "address": "0x3e7d9c1b5a2f4e6d8c0b1a2f3e4d5c6b7a8f9e01",
          "chain": "ARC-TESTNET"
        },
        "body_hash": "e2ccbd8cdd6456350288c1f13d3571f64f76645ff2838676d50a8a2e7c9c07d6",
        "signature": "c91c53067e8c830328533a50e3953214eacd8275acab44914cd3afe94145495f4dfde94cee390caad3e8f0865ccb99fc316863af556363381a50c40d1838840f",
        "prev_hash": "0a40c77a63ada232560e392c2e6b2a0ba790cd489c98dbf1e51856fc0c2e0af4",
        "hash": "09c9fc837135aa8c1570b36ab1dc22a6cf727dccc9d3364978b6c293db7b8144",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      },
      {
        "seq": 5604,
        "id": "893c07ed-20c4-44c8-9af6-2c01c57d5188",
        "ts": "2026-10-01T09:05:00.000Z",
        "actor": "human",
        "domain": "compliance",
        "action": "counterparty_address_confirmed",
        "summary": "Confirmed Lumen Dev's payout address",
        "detail": {
          "by": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b02",
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c02",
          "address": "0x3e7d9c1b5a2f4e6d8c0b1a2f3e4d5c6b7a8f9e01",
          "chain": "ARC-TESTNET",
          "via": "confirm",
          "payeeLock": {
            "coolingHours": 24
          }
        },
        "body_hash": "ce8d26688d5e5e11714bd759bdfce422f27e29eb30f5c81e0e8a3db1ba9868db",
        "signature": "db01ada362a26c4d8dab8528cae2cb0961fc9fcb1d81fa5266504f2fa989b21ee43d3d4efcdfddf8f892a23e158ded92a601562d12b52fc5b4755fa63e9a9306",
        "prev_hash": "09c9fc837135aa8c1570b36ab1dc22a6cf727dccc9d3364978b6c293db7b8144",
        "hash": "7890fd259c2a528efe9e2a57ff9b2d79385a4e7a684bcd2b12a1f93de96853d9",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      },
      {
        "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": 5611,
        "id": "a85a44cf-3b4c-46e0-a700-2f5f69baeb00",
        "ts": "2026-10-03T16:00:00.000Z",
        "actor": "human",
        "domain": "contractor",
        "action": "create_milestone",
        "summary": "Added a milestone for Lumen Dev: Checkout page redesign, 800 USDC",
        "detail": {
          "by": "4b7e0c1a-2d3f-4e5a-8b6c-7d8e9f0a1b01",
          "milestoneId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4f61",
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c02",
          "counterpartyName": "Lumen Dev",
          "amount": 800,
          "verificationSource": "https://github.com/northstar-studio/site/pull/48"
        },
        "body_hash": "a6c87fb49341cf5cac1db041ef3b707aa1e6292ee79c759486bb48c8a561c984",
        "signature": "bff59cdb1df88107c19201024c97d9eb21a78a2a10449f38377f24a4af3edc9abca146874511813b9d03360845656921afe09b14594fe7707f9fe24ecac1c903",
        "prev_hash": "1bd91f4c85872fe824fc18dfb7409f1ce3bbe63728fe993d070a4e14ef03c070",
        "hash": "655b287db5c7d17fdf9f87425bd3a434555a89ea8dbc71125b319d7569dfd785",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      },
      {
        "seq": 5613,
        "id": "78398ac1-68ee-49b5-bdd6-ac91c8efd46a",
        "ts": "2026-10-08T09:10:00.000Z",
        "actor": "system",
        "domain": "contractor",
        "action": "verify_milestone_github",
        "summary": "GitHub reported northstar-studio/site#48 merged",
        "detail": {
          "milestoneId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4f61",
          "verificationSource": "https://github.com/northstar-studio/site/pull/48",
          "verificationStatus": "verified",
          "pullRequest": "https://github.com/northstar-studio/site/pull/48",
          "mergedAt": "2026-10-08T09:00:00.000Z"
        },
        "body_hash": "02cda18d117ee8a85b545b2f763e98c76da513ae29cd6c5be13edddcb7e521e9",
        "signature": "476786c4a530c5812390de35db83f990bea1da69a5da3830d38b46df99dbcba6de19c61901ec410c2c959292b6dd5731d65181403668b6ed9577cf87a8bf6a0c",
        "prev_hash": "b2687ac1ce1ae6f949ccd43e446e22fe7b36dc6dda1eebaa66d40afdca2fba81",
        "hash": "913a2752c8857418c9c9cfdf90c1066d64c2385b162b53f33daf2a6e9fb1ead8",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      },
      {
        "seq": 5614,
        "id": "b35a5cdd-fbc9-43eb-8fc4-88bdfcf580c1",
        "ts": "2026-10-08T09:11:00.000Z",
        "actor": "agent",
        "domain": "contractor",
        "action": "milestone_release",
        "summary": "Released 800 USDC to Lumen Dev for Checkout page redesign",
        "detail": {
          "milestoneId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4f61",
          "counterpartyId": "7d1e4c2a-5b3f-4e8a-9c61-2f0a8b3d4c02",
          "decision": {
            "action": "release"
          },
          "decisionMode": "anthropic",
          "agreedWithReference": true,
          "guardrailBlocked": false,
          "observed": {
            "amount": 800,
            "paymentLimit": 1000,
            "riskLevel": "clear",
            "verification": {
              "verified": true,
              "method": "github",
              "source": "https://github.com/northstar-studio/site/pull/48",
              "note": null
            }
          },
          "execution": {
            "txRef": "0xaa4864c775958bc6f6fd541460df2a351093dd600e37329351639dd191f2030c",
            "resultingStatus": "paid"
          }
        },
        "body_hash": "40a6a70c89faeecaea30c2e9375a532f7a4d1c0384cc158119f1219678dfeefb",
        "signature": "fbf6d5a4cda2134e5d946f23774303f56c359b60b2006bacb1a37c74ef0c8c83ff3ac20bce50b29ec74756fa41fc8e06fc200b6894d7de8f642d3325dae5a703",
        "prev_hash": "913a2752c8857418c9c9cfdf90c1066d64c2385b162b53f33daf2a6e9fb1ead8",
        "hash": "fb8324e5ec87a4b8073032fb05e1d44a2773a714e317a4e5909943d6cc5b1c61",
        "signing_key_id": "36e3209ae2e6a600",
        "check": {
          "ok": true
        }
      }
    ]
  }
}
```

**Fields**

- `data` (object, required): A month's close pack, `vestiarion-close-pack/1`: every payment settled in it, one row each with its signed entry, the payments not settled, the escrow moves, totals, and every cited entry in full.
  - `format` (string, required) One of `vestiarion-close-pack/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.
  - `month` (object, required): A calendar month in UTC.
    - `from` (string, required): The first day, `YYYY-MM-DD` (UTC).
    - `to` (string, required): The next month's first day: the month runs up to it, not including it.
    - `label` (string, required)
    - `key` (string, required): `YYYY-MM`.
    - `ended` (boolean, required): Whether the month has ended: false for this month so far.
  - `ledgerHead` (object, nullable, required): The ledger's newest entry when the pack was read.
    - `seq` (integer, required)
    - `hash` (string, required)
  - `cut` (boolean, required): The month holds more payments than one pack reads (2,000), and the pack stops there.
  - `unread` (array of string, required): Parts that could not be read just now; the rest shows.
  - `totals` (object, required)
    - `onChain` (array of object, required)
      - `token` (string, required) One of `USDC`, `EURC`.
      - `payments` (integer, required)
      - `amount` (string, required): An amount as text with exactly six decimal places, never a float.
      - `routeFeesUsdc` (string, required): An amount as text with exactly six decimal places, never a float.
    - `simulated` (array of object, required)
      - `token` (string, required) One of `USDC`, `EURC`.
      - `payments` (integer, required)
      - `amount` (string, required): An amount as text with exactly six decimal places, never a float.
      - `routeFeesUsdc` (string, required): An amount as text with exactly six decimal places, never a float.
    - `shadow` (integer, required)
    - `notSettled` (object, required)
    - `withoutBill` (integer, required)
    - `entries` (object, required)
      - `cited` (integer, required)
      - `verified` (integer, required)
      - `failed` (integer, required)
      - `unchecked` (integer, required)
  - `rows` (array of object, required)
    - `paymentId` (string, required)
    - `source` (object, required)
      - `kind` (string, required) One of `invoice`, `milestone`.
      - `id` (string, required)
    - `paidAt` (string, required)
    - `sentAt` (string, required)
    - `amount` (string, required): An amount as text with exactly six decimal places, never a float.
    - `token` (string, required) One of `USDC`, `EURC`.
    - `discount` (string, nullable, required)
    - `simulated` (boolean, required)
    - `shadow` (boolean, required)
    - `payee` (object, required)
      - `counterpartyId` (string, required)
      - `name` (string, nullable, required)
      - `address` (string, nullable, required)
      - `bank` (object, nullable, required)
        - `provider` (string, required) One of `blindpay`.
        - `bankCode` (string, nullable, required)
        - `last4` (string, nullable, required)
        - `rail` (string, nullable, required)
        - `receiverAmount` (string, nullable, required)
        - `receiverCurrency` (string, nullable, required)
        - `payoutId` (string, nullable, required)
    - `bill` (any, required)
    - `approval` (object, required)
      - `authorizedBy` (string, nullable, required) One of `code`, `person`, `two_people`.
      - `agent` (object, nullable, required)
        - `action` (string, required)
        - `decider` (string, required)
        - `guardrailRule` (string, nullable, required)
        - `shadow` (boolean, required)
        - `at` (string, required)
        - `entry` (integer, required)
      - `approvals` (array of object, required)
        - `who` (any, required): Who did a step.
        - `at` (string, required)
        - `cosign` (boolean, required)
        - `paid` (boolean, required)
        - `via` (string, nullable, required)
        - `entry` (integer, nullable, required)
      - `verdict` (object, nullable, required)
        - `verdict` (string, required) One of `agree`, `disagree`.
        - `who` (any, required): Who did a step.
        - `at` (string, required)
        - `entry` (integer, required)
      - `flags` (object, required)
        - `soleApprover` (boolean, required)
        - `addressGiverApproved` (boolean, required)
        - `firstPayment` (boolean, required)
        - `fewApprovers` (boolean, required)
      - `address` (object, nullable, required)
        - `address` (string, required)
        - `mirror` (boolean, required)
        - `givenBy` (any, nullable, required): Who did a step.
        - `givenAt` (string, nullable, required)
        - `confirmedBy` (any, nullable, required): Who did a step.
        - `confirmedAt` (string, nullable, required)
        - `confirmedWith` (string, nullable, required) One of `confirm`, `approval`.
        - `secondPerson` (boolean, nullable, required)
        - `entries` (array of integer, required)
    - `checks` (object, required)
      - `guardrails` (object, required)
        - `kind` (string, required) One of `checked`, `verified`, `stated`, `inferred`, `missing`, `unreachable`, `contradicted`, `not_applicable`.
        - `text` (string, required)
        - `notes` (array of string, required)
        - `at` (string, nullable, required)
        - `entries` (array of integer, required)
        - `warn` (boolean, required): Bad news, however well it is known.
      - `screening` (object, required)
        - `kind` (string, required) One of `checked`, `verified`, `stated`, `inferred`, `missing`, `unreachable`, `contradicted`, `not_applicable`.
        - `text` (string, required)
        - `notes` (array of string, required)
        - `at` (string, nullable, required)
        - `entries` (array of integer, required)
        - `warn` (boolean, required): Bad news, however well it is known.
      - `walletList` (object, required)
        - `kind` (string, required) One of `checked`, `verified`, `stated`, `inferred`, `missing`, `unreachable`, `contradicted`, `not_applicable`.
        - `text` (string, required)
        - `notes` (array of string, required)
        - `at` (string, nullable, required)
        - `entries` (array of integer, required)
        - `warn` (boolean, required): Bad news, however well it is known.
      - `payeeLock` (object, required)
        - `kind` (string, required) One of `checked`, `verified`, `stated`, `inferred`, `missing`, `unreachable`, `contradicted`, `not_applicable`.
        - `text` (string, required)
        - `notes` (array of string, required)
        - `at` (string, nullable, required)
        - `entries` (array of integer, required)
        - `warn` (boolean, required): Bad news, however well it is known.
      - `payTo` (object, required)
        - `kind` (string, required) One of `checked`, `verified`, `stated`, `inferred`, `missing`, `unreachable`, `contradicted`, `not_applicable`.
        - `text` (string, required)
        - `notes` (array of string, required)
        - `at` (string, nullable, required)
        - `entries` (array of integer, required)
        - `warn` (boolean, required): Bad news, however well it is known.
      - `milestone` (object, required)
        - `kind` (string, required) One of `checked`, `verified`, `stated`, `inferred`, `missing`, `unreachable`, `contradicted`, `not_applicable`.
        - `text` (string, required)
        - `notes` (array of string, required)
        - `at` (string, nullable, required)
        - `entries` (array of integer, required)
        - `warn` (boolean, required): Bad news, however well it is known.
    - `transaction` (object, required)
      - `route` (string, required) One of `direct`, `cctp`, `gateway`, `escrow`, `bank`, `simulated`.
      - `txHash` (string, nullable, required)
      - `chain` (string, nullable, required)
      - `chainLabel` (string, nullable, required)
      - `explorerUrl` (string, nullable, required)
      - `sourceTxHash` (string, nullable, required)
      - `sourceExplorerUrl` (string, nullable, required)
      - `simulatedRef` (string, nullable, required)
      - `note` (string, nullable, required)
      - `networkFeeUsd` (string, nullable, required)
      - `networkFeeSource` (string, nullable, required) One of `chain_reported`, `provider_estimate`, `simulated_profile`.
      - `routeFeeUsdc` (string, nullable, required)
      - `earlierAttempts` (integer, required)
    - `record` (object, nullable, required): The signed entry that records the payment: a copy of its hash and signature, which `entries` carries in full.
      - `seq` (integer, required)
      - `action` (string, required)
      - `ts` (string, required)
      - `hash` (string, required)
      - `signature` (string, required)
      - `signingKeyId` (string, nullable, required)
      - `check` (any, required): One entry checked alone: `true` it verifies, `false` it does not, `null` it could not be checked here, for example by a key not known here.
    - `books` (object, required)
      - `markedPaid` (boolean, required)
      - `mismatch` (string, nullable, required) One of `confirmed_not_marked_paid`, `marked_paid_not_confirmed`, `marked_paid_other_transaction`, `no_signed_entry`.
      - `booked` (object, nullable, required)
        - `tool` (string, required)
        - `state` (string, required)
        - `paymentId` (string, nullable, required)
        - `at` (string, required)
        - `entry` (integer, required)
    - `evidencePath` (string, required)
    - `entries` (array of integer, required): Every entry the row cites, ascending.
    - `evidenceUrl` (string, required)
  - `notSettled` (array of object, required)
    - `paymentId` (string, required)
    - `source` (object, required)
      - `kind` (string, required) One of `invoice`, `milestone`.
      - `id` (string, required)
    - `payee` (object, required)
      - `counterpartyId` (string, required)
      - `name` (string, nullable, required)
    - `amount` (string, required): An amount as text with exactly six decimal places, never a float.
    - `token` (string, required) One of `USDC`, `EURC`.
    - `simulated` (boolean, required)
    - `state` (string, required) One of `settled_later`, `waiting`, `in_flight`, `unknown`, `gateway_failed`, `failed`, `cancelled`, `not_sent`, `refunded`.
    - `sentAt` (string, nullable, required)
    - `settledAt` (string, nullable, required)
    - `reason` (string, nullable, required)
    - `txHash` (string, nullable, required)
    - `explorerUrl` (string, nullable, required)
    - `evidencePath` (string, required)
    - `evidenceUrl` (string, required)
  - `escrow` (array of object, required)
    - `kind` (string, required) One of `funded`, `refunded`.
    - `at` (string, required)
    - `milestoneId` (string, required)
    - `title` (string, nullable, required)
    - `amount` (string, required): An amount as text with exactly six decimal places, never a float.
    - `txHash` (string, nullable, required)
    - `explorerUrl` (string, nullable, required)
    - `entry` (integer, required)
  - `labels` (object, required): Each check kind's words and what it means.
  - `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 |
| --- | --- | --- |
| 400 | `invalid_request` | An invalid `limit` or `cursor`, a filter value outside its allowed values, or a request body that does not validate. The message names the parameter or the field, and lists the accepted values. |
| 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." |
| 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. |
