Skip to content

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 as Authorization: Bearer ….

Parameters

  • monthstringrequiredin: path

    The month, as YYYY-MM: a calendar month in UTC.

Try it

The key is kept in memory only, for this page.

Enter month to send the request.

Code samples

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

Response

Example
200 · application/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
  • dataobject

    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.

    17 fields in data
    • formatstring

      One ofvestiarion-close-pack/1

    • exportedAtstring
    • workspaceobject

      The workspace the document is of.

      2 fields in workspace
      • slugstring
      • namestring
    • networkobject

      The workspace's network.

      2 fields in network
      • idstring

        One ofarc-testnetarc-mainnet

      • labelstring

        The network's name, as the workspace's pages write it.

    • monthobject

      A calendar month in UTC.

      5 fields in month
      • fromstring

        The first day, YYYY-MM-DD (UTC).

      • tostring

        The next month's first day: the month runs up to it, not including it.

      • labelstring
      • keystring

        YYYY-MM.

      • endedboolean

        Whether the month has ended: false for this month so far.

    • ledgerHeadobject · nullable

      The ledger's newest entry when the pack was read.

      2 fields in ledgerHead
      • seqinteger
      • hashstring
    • cutboolean

      The month holds more payments than one pack reads (2,000), and the pack stops there.

    • unreadarray of string

      Parts that could not be read just now; the rest shows.

    • totalsobject
      6 fields in totals
      • onChainarray of object
        4 fields in onChain
        • tokenstring

          One ofUSDCEURC

        • paymentsinteger
        • amountstring

          An amount as text with exactly six decimal places, never a float.

        • routeFeesUsdcstring

          An amount as text with exactly six decimal places, never a float.

      • simulatedarray of object
        4 fields in simulated
        • tokenstring

          One ofUSDCEURC

        • paymentsinteger
        • amountstring

          An amount as text with exactly six decimal places, never a float.

        • routeFeesUsdcstring

          An amount as text with exactly six decimal places, never a float.

      • shadowinteger
      • notSettledobject
      • withoutBillinteger
      • entriesobject
        4 fields in entries
        • citedinteger
        • verifiedinteger
        • failedinteger
        • uncheckedinteger
    • rowsarray of object
      19 fields in rows
      • paymentIdstring
      • sourceobject
        2 fields in source
        • kindstring

          One ofinvoicemilestone

        • idstring
      • paidAtstring
      • sentAtstring
      • amountstring

        An amount as text with exactly six decimal places, never a float.

      • tokenstring

        One ofUSDCEURC

      • discountstring · nullable
      • simulatedboolean
      • shadowboolean
      • payeeobject
        4 fields in payee
        • counterpartyIdstring
        • namestring · nullable
        • addressstring · nullable
        • bankobject · nullable
          7 fields in bank
          • providerstring

            One ofblindpay

          • bankCodestring · nullable
          • last4string · nullable
          • railstring · nullable
          • receiverAmountstring · nullable
          • receiverCurrencystring · nullable
          • payoutIdstring · nullable
      • billany
      • approvalobject
        6 fields in approval
        • authorizedBystring · nullable

          One ofcodepersontwo_people

        • agentobject · nullable
          6 fields in agent
          • actionstring
          • deciderstring
          • guardrailRulestring · nullable
          • shadowboolean
          • atstring
          • entryinteger
        • approvalsarray of object
          6 fields in approvals
          • whoany

            Who did a step.

          • atstring
          • cosignboolean
          • paidboolean
          • viastring · nullable
          • entryinteger · nullable
        • verdictobject · nullable
          4 fields in verdict
          • verdictstring

            One ofagreedisagree

          • whoany

            Who did a step.

          • atstring
          • entryinteger
        • flagsobject
          4 fields in flags
          • soleApproverboolean
          • addressGiverApprovedboolean
          • firstPaymentboolean
          • fewApproversboolean
        • addressobject · nullable
          9 fields in address
          • addressstring
          • mirrorboolean
          • givenByany · nullable

            Who did a step.

          • givenAtstring · nullable
          • confirmedByany · nullable

            Who did a step.

          • confirmedAtstring · nullable
          • confirmedWithstring · nullable

            One ofconfirmapproval

          • secondPersonboolean · nullable
          • entriesarray of integer
      • checksobject
        6 fields in checks
        • guardrailsobject
          6 fields in guardrails
          • kindstring

            One ofcheckedverifiedstatedinferredmissingunreachablecontradictednot_applicable

          • textstring
          • notesarray of string
          • atstring · nullable
          • entriesarray of integer
          • warnboolean

            Bad news, however well it is known.

        • screeningobject
          6 fields in screening
          • kindstring

            One ofcheckedverifiedstatedinferredmissingunreachablecontradictednot_applicable

          • textstring
          • notesarray of string
          • atstring · nullable
          • entriesarray of integer
          • warnboolean

            Bad news, however well it is known.

        • walletListobject
          6 fields in walletList
          • kindstring

            One ofcheckedverifiedstatedinferredmissingunreachablecontradictednot_applicable

          • textstring
          • notesarray of string
          • atstring · nullable
          • entriesarray of integer
          • warnboolean

            Bad news, however well it is known.

        • payeeLockobject
          6 fields in payeeLock
          • kindstring

            One ofcheckedverifiedstatedinferredmissingunreachablecontradictednot_applicable

          • textstring
          • notesarray of string
          • atstring · nullable
          • entriesarray of integer
          • warnboolean

            Bad news, however well it is known.

        • payToobject
          6 fields in payTo
          • kindstring

            One ofcheckedverifiedstatedinferredmissingunreachablecontradictednot_applicable

          • textstring
          • notesarray of string
          • atstring · nullable
          • entriesarray of integer
          • warnboolean

            Bad news, however well it is known.

        • milestoneobject
          6 fields in milestone
          • kindstring

            One ofcheckedverifiedstatedinferredmissingunreachablecontradictednot_applicable

          • textstring
          • notesarray of string
          • atstring · nullable
          • entriesarray of integer
          • warnboolean

            Bad news, however well it is known.

      • transactionobject
        13 fields in transaction
        • routestring

          One ofdirectcctpgatewayescrowbanksimulated

        • txHashstring · nullable
        • chainstring · nullable
        • chainLabelstring · nullable
        • explorerUrlstring · nullable
        • sourceTxHashstring · nullable
        • sourceExplorerUrlstring · nullable
        • simulatedRefstring · nullable
        • notestring · nullable
        • networkFeeUsdstring · nullable
        • networkFeeSourcestring · nullable

          One ofchain_reportedprovider_estimatesimulated_profile

        • routeFeeUsdcstring · nullable
        • earlierAttemptsinteger
      • recordobject · nullable

        The signed entry that records the payment: a copy of its hash and signature, which entries carries in full.

        7 fields in record
        • seqinteger
        • actionstring
        • tsstring
        • hashstring
        • signaturestring
        • signingKeyIdstring · nullable
        • checkany

          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.

      • booksobject
        3 fields in books
        • markedPaidboolean
        • mismatchstring · nullable

          One ofconfirmed_not_marked_paidmarked_paid_not_confirmedmarked_paid_other_transactionno_signed_entry

        • bookedobject · nullable
          5 fields in booked
          • toolstring
          • statestring
          • paymentIdstring · nullable
          • atstring
          • entryinteger
      • evidencePathstring
      • entriesarray of integer

        Every entry the row cites, ascending.

      • evidenceUrlstring
    • notSettledarray of object
      14 fields in notSettled
      • paymentIdstring
      • sourceobject
        2 fields in source
        • kindstring

          One ofinvoicemilestone

        • idstring
      • payeeobject
        2 fields in payee
        • counterpartyIdstring
        • namestring · nullable
      • amountstring

        An amount as text with exactly six decimal places, never a float.

      • tokenstring

        One ofUSDCEURC

      • simulatedboolean
      • statestring

        One ofsettled_laterwaitingin_flightunknowngateway_failedfailedcancellednot_sentrefunded

      • sentAtstring · nullable
      • settledAtstring · nullable
      • reasonstring · nullable
      • txHashstring · nullable
      • explorerUrlstring · nullable
      • evidencePathstring
      • evidenceUrlstring
    • escrowarray of object
      8 fields in escrow
      • kindstring

        One offundedrefunded

      • atstring
      • milestoneIdstring
      • titlestring · nullable
      • amountstring

        An amount as text with exactly six decimal places, never a float.

      • txHashstring · nullable
      • explorerUrlstring · nullable
      • entryinteger
    • labelsobject

      Each check kind's words and what it means.

    • signedEntryProvesstring

      What a signed entry proves, and what it does not.

    • checkAnEntryarray of string

      How to check one entry alone: its body hash, its signature and its chain hash.

    • keysarray of object

      The workspace's public keys, active and retired, each under its id: what the entries were signed with.

      3 fields in keys
      • idstring

        The first 16 hex characters of the SHA-256 of the key's public SPKI: a key counts only under this id.

      • statusstring

        One ofactiveretired

      • publicKeyPemstring
    • entriesarray of object

      Every entry the document cites, oldest first, in full, each with the server's check.

      14 fields in entries
      • seqinteger
      • idstring · nullable
      • tsstring
      • actorstring
      • domainstring
      • actionstring
      • summarystring
      • detailobject
      • body_hashstring
      • signaturestring
      • prev_hashstring
      • hashstring
      • signing_key_idstring · nullable
      • checkany · nullable

        The server's check of this entry alone. A checker re-checks it rather than trust this field.

Errors

StatusCodeWhen
400invalid_requestAn 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.
401unauthorizedNo key, or a malformed, unknown or revoked one: "A valid API key is required."
403forbiddenThe 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."
429rate_limitedToo many requests; wait as long as Retry-After says before trying again.
500internalAn unexpected server error. Implementation details are not exposed.