Get a monthly close pack
/ 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: pathThe 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 "https://www.vestiarion.xyz/api/v1/close-packs/<month>" \
-H "Authorization: Bearer $VESTIARION_API_KEY"Response
Example{
"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
}
}
]
}
}dataobjectA 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
formatstringOne of
vestiarion-close-pack/1exportedAtstringworkspaceobjectThe workspace the document is of.
2 fields in workspace
slugstringnamestring
networkobjectThe workspace's network.
2 fields in network
idstringOne of
arc-testnetarc-mainnetlabelstringThe network's name, as the workspace's pages write it.
monthobjectA calendar month in UTC.
5 fields in month
fromstringThe first day,
YYYY-MM-DD(UTC).tostringThe next month's first day: the month runs up to it, not including it.
labelstringkeystringYYYY-MM.endedbooleanWhether the month has ended: false for this month so far.
ledgerHeadobject · nullableThe ledger's newest entry when the pack was read.
2 fields in ledgerHead
seqintegerhashstring
cutbooleanThe month holds more payments than one pack reads (2,000), and the pack stops there.
unreadarray of stringParts that could not be read just now; the rest shows.
totalsobject6 fields in totals
onChainarray of object4 fields in onChain
tokenstringOne of
USDCEURCpaymentsintegeramountstringAn amount as text with exactly six decimal places, never a float.
routeFeesUsdcstringAn amount as text with exactly six decimal places, never a float.
simulatedarray of object4 fields in simulated
tokenstringOne of
USDCEURCpaymentsintegeramountstringAn amount as text with exactly six decimal places, never a float.
routeFeesUsdcstringAn amount as text with exactly six decimal places, never a float.
shadowintegernotSettledobjectwithoutBillintegerentriesobject4 fields in entries
citedintegerverifiedintegerfailedintegeruncheckedinteger
rowsarray of object19 fields in rows
paymentIdstringsourceobject2 fields in source
kindstringOne of
invoicemilestoneidstring
paidAtstringsentAtstringamountstringAn amount as text with exactly six decimal places, never a float.
tokenstringOne of
USDCEURCdiscountstring · nullablesimulatedbooleanshadowbooleanpayeeobject4 fields in payee
counterpartyIdstringnamestring · nullableaddressstring · nullablebankobject · nullable7 fields in bank
providerstringOne of
blindpaybankCodestring · nullablelast4string · nullablerailstring · nullablereceiverAmountstring · nullablereceiverCurrencystring · nullablepayoutIdstring · nullable
billanyapprovalobject6 fields in approval
authorizedBystring · nullableOne of
codepersontwo_peopleagentobject · nullable6 fields in agent
actionstringdeciderstringguardrailRulestring · nullableshadowbooleanatstringentryinteger
approvalsarray of object6 fields in approvals
whoanyWho did a step.
atstringcosignbooleanpaidbooleanviastring · nullableentryinteger · nullable
verdictobject · nullable4 fields in verdict
verdictstringOne of
agreedisagreewhoanyWho did a step.
atstringentryinteger
flagsobject4 fields in flags
soleApproverbooleanaddressGiverApprovedbooleanfirstPaymentbooleanfewApproversboolean
addressobject · nullable9 fields in address
addressstringmirrorbooleangivenByany · nullableWho did a step.
givenAtstring · nullableconfirmedByany · nullableWho did a step.
confirmedAtstring · nullableconfirmedWithstring · nullableOne of
confirmapprovalsecondPersonboolean · nullableentriesarray of integer
checksobject6 fields in checks
guardrailsobject6 fields in guardrails
kindstringOne of
checkedverifiedstatedinferredmissingunreachablecontradictednot_applicabletextstringnotesarray of stringatstring · nullableentriesarray of integerwarnbooleanBad news, however well it is known.
screeningobject6 fields in screening
kindstringOne of
checkedverifiedstatedinferredmissingunreachablecontradictednot_applicabletextstringnotesarray of stringatstring · nullableentriesarray of integerwarnbooleanBad news, however well it is known.
walletListobject6 fields in walletList
kindstringOne of
checkedverifiedstatedinferredmissingunreachablecontradictednot_applicabletextstringnotesarray of stringatstring · nullableentriesarray of integerwarnbooleanBad news, however well it is known.
payeeLockobject6 fields in payeeLock
kindstringOne of
checkedverifiedstatedinferredmissingunreachablecontradictednot_applicabletextstringnotesarray of stringatstring · nullableentriesarray of integerwarnbooleanBad news, however well it is known.
payToobject6 fields in payTo
kindstringOne of
checkedverifiedstatedinferredmissingunreachablecontradictednot_applicabletextstringnotesarray of stringatstring · nullableentriesarray of integerwarnbooleanBad news, however well it is known.
milestoneobject6 fields in milestone
kindstringOne of
checkedverifiedstatedinferredmissingunreachablecontradictednot_applicabletextstringnotesarray of stringatstring · nullableentriesarray of integerwarnbooleanBad news, however well it is known.
transactionobject13 fields in transaction
routestringOne of
directcctpgatewayescrowbanksimulatedtxHashstring · nullablechainstring · nullablechainLabelstring · nullableexplorerUrlstring · nullablesourceTxHashstring · nullablesourceExplorerUrlstring · nullablesimulatedRefstring · nullablenotestring · nullablenetworkFeeUsdstring · nullablenetworkFeeSourcestring · nullableOne of
chain_reportedprovider_estimatesimulated_profilerouteFeeUsdcstring · nullableearlierAttemptsinteger
recordobject · nullableThe signed entry that records the payment: a copy of its hash and signature, which
entriescarries in full.7 fields in record
seqintegeractionstringtsstringhashstringsignaturestringsigningKeyIdstring · nullablecheckanyOne entry checked alone:
trueit verifies,falseit does not,nullit could not be checked here, for example by a key not known here.
booksobject3 fields in books
markedPaidbooleanmismatchstring · nullableOne of
confirmed_not_marked_paidmarked_paid_not_confirmedmarked_paid_other_transactionno_signed_entrybookedobject · nullable5 fields in booked
toolstringstatestringpaymentIdstring · nullableatstringentryinteger
evidencePathstringentriesarray of integerEvery entry the row cites, ascending.
evidenceUrlstring
notSettledarray of object14 fields in notSettled
paymentIdstringsourceobject2 fields in source
kindstringOne of
invoicemilestoneidstring
payeeobject2 fields in payee
counterpartyIdstringnamestring · nullable
amountstringAn amount as text with exactly six decimal places, never a float.
tokenstringOne of
USDCEURCsimulatedbooleanstatestringOne of
settled_laterwaitingin_flightunknowngateway_failedfailedcancellednot_sentrefundedsentAtstring · nullablesettledAtstring · nullablereasonstring · nullabletxHashstring · nullableexplorerUrlstring · nullableevidencePathstringevidenceUrlstring
escrowarray of object8 fields in escrow
kindstringOne of
fundedrefundedatstringmilestoneIdstringtitlestring · nullableamountstringAn amount as text with exactly six decimal places, never a float.
txHashstring · nullableexplorerUrlstring · nullableentryinteger
labelsobjectEach check kind's words and what it means.
signedEntryProvesstringWhat a signed entry proves, and what it does not.
checkAnEntryarray of stringHow to check one entry alone: its body hash, its signature and its chain hash.
keysarray of objectThe workspace's public keys, active and retired, each under its id: what the entries were signed with.
3 fields in keys
idstringThe first 16 hex characters of the SHA-256 of the key's public SPKI: a key counts only under this id.
statusstringOne of
activeretiredpublicKeyPemstring
entriesarray of objectEvery entry the document cites, oldest first, in full, each with the server's check.
14 fields in entries
seqintegeridstring · nullabletsstringactorstringdomainstringactionstringsummarystringdetailobjectbody_hashstringsignaturestringprev_hashstringhashstringsigning_key_idstring · nullablecheckany · nullableThe 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. |