ledger
The ledger noun — identity, lifecycle, events, and every capability as an anchored section: 6 capabilities, 0 live, 6 sandbox, 0 declared.
ledger is one of the estate's 317 automotive nouns — a job a car needs done. It carries 6 capabilities: 0 live, 6 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | ledger |
| Pillar | Services (facets: 2 data · 4 services) |
| Capabilities | 6 — 0 live · 6 sandbox · 0 declared |
| Entities | LedgerEvent |
| Doors | aggregator.vin |
| SDK | Vin.ledger.* from apis.vin |
| Address | /catalog/ledger#{action} — the anchor IS the wire name minus ledger. |
Events
The vocabulary this noun can append to the record — 4 past-tense, versioned event types, each linked to the capability that emits it:
Ledger.closed@1— emitted bycloseLedger.dealReconciled@1— emitted bydealJacketReconLedger.dmsPosted@1— emitted bydmsPostLedger.posted@1— emitted bypost
Discover & read
audit
ledger.audit · GET /ledgers/audit · gate key · sandbox · answers LedgerAudit@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /19XFC1F91HE019415 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { ledger } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await ledger.audit({"vin":"19XFC1F91HE019415"})curl 'https://apis.vin/ledgers/audit?vin=19XFC1F91HE019415'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "LedgerAudit@1",
"value": {
"id": "ledger_583abe4b",
"type": "EventName-01",
"streamId": "aggregate_7178579b",
"correlationId": "W0-EVT-01",
"who": "party_4450930a",
"authority": "mandate_f29ee987",
"occurredAt": "2026-09-13T00:00:00.000Z",
"recordedAt": "2026-09-13T00:00:00.000Z",
"payload": "pointers-22628c2c"
},
"evidence": {
"id": "ledger_583abe4b",
"type": "EventName-01",
"streamId": "aggregate_7178579b",
"correlationId": "W0-EVT-01",
"who": "party_4450930a",
"authority": "mandate_f29ee987",
"occurredAt": "2026-09-13T00:00:00.000Z",
"recordedAt": "2026-09-13T00:00:00.000Z",
"payload": "pointers-22628c2c"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ledger-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
schedule
ledger.schedule · GET /ledgers/schedule · gate key · sandbox · answers LedgerSchedule@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /19XFC1F91HE019415 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { ledger } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await ledger.schedule({"vin":"19XFC1F91HE019415"})curl 'https://apis.vin/ledgers/schedule?vin=19XFC1F91HE019415'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "LedgerSchedule@1",
"value": {
"id": "ledger_6880a82d",
"type": "EventName-01",
"streamId": "aggregate_a380730d",
"correlationId": "W0-EVT-01",
"who": "party_3d97da68",
"authority": "mandate_51d80ce5",
"occurredAt": "2027-04-09T00:00:00.000Z",
"recordedAt": "2027-04-09T00:00:00.000Z",
"payload": "pointers-822b1bfe"
},
"evidence": {
"id": "ledger_6880a82d",
"type": "EventName-01",
"streamId": "aggregate_a380730d",
"correlationId": "W0-EVT-01",
"who": "party_3d97da68",
"authority": "mandate_51d80ce5",
"occurredAt": "2027-04-09T00:00:00.000Z",
"recordedAt": "2027-04-09T00:00:00.000Z",
"payload": "pointers-822b1bfe"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ledger-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Lifecycle & state
close
ledger.close · POST /ledgers/close · gate offer · sandbox · answers LedgerClose@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /19XFC1F91HE019415 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Ledger.closed@1.
import { ledger } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await ledger.close({"vin":"19XFC1F91HE019415"})curl -X POST https://apis.vin/ledgers/close \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F91HE019415"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "LedgerClose@1",
"value": {
"id": "ledger_2ae12949",
"type": "EventName-01",
"streamId": "aggregate_f6b703f1",
"correlationId": "W0-EVT-01",
"who": "party_53d1bf14",
"authority": "mandate_80c00fe1",
"occurredAt": "2026-11-28T00:00:00.000Z",
"recordedAt": "2026-11-28T00:00:00.000Z",
"payload": "pointers-3779c2d2"
},
"evidence": {
"id": "ledger_2ae12949",
"type": "EventName-01",
"streamId": "aggregate_f6b703f1",
"correlationId": "W0-EVT-01",
"who": "party_53d1bf14",
"authority": "mandate_80c00fe1",
"occurredAt": "2026-11-28T00:00:00.000Z",
"recordedAt": "2026-11-28T00:00:00.000Z",
"payload": "pointers-3779c2d2"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ledger-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
dealJacketRecon
ledger.dealJacketRecon · POST /ledgers/deal-jacket-recon · gate offer · sandbox · answers LedgerDealJacketRecon@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /19XFC1F91HE019415 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Ledger.dealReconciled@1.
import { ledger } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await ledger.dealJacketRecon({"vin":"19XFC1F91HE019415"})curl -X POST https://apis.vin/ledgers/deal-jacket-recon \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F91HE019415"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "LedgerDealJacketRecon@1",
"value": {
"id": "ledger_0bd13326",
"type": "EventName-01",
"streamId": "aggregate_d751ee2e",
"correlationId": "W0-EVT-01",
"who": "party_137d8581",
"authority": "mandate_a2dca390",
"occurredAt": "2027-05-26T00:00:00.000Z",
"recordedAt": "2027-05-26T00:00:00.000Z",
"payload": "pointers-6380ff9b"
},
"evidence": {
"id": "ledger_0bd13326",
"type": "EventName-01",
"streamId": "aggregate_d751ee2e",
"correlationId": "W0-EVT-01",
"who": "party_137d8581",
"authority": "mandate_a2dca390",
"occurredAt": "2027-05-26T00:00:00.000Z",
"recordedAt": "2027-05-26T00:00:00.000Z",
"payload": "pointers-6380ff9b"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ledger-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}dmsPost
ledger.dmsPost · POST /ledgers/dms-post · gate offer · sandbox · answers LedgerDmsPost@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /19XFC1F91HE019415 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Ledger.dmsPosted@1.
import { ledger } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await ledger.dmsPost({"vin":"19XFC1F91HE019415"})curl -X POST https://apis.vin/ledgers/dms-post \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F91HE019415"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "LedgerDmsPost@1",
"value": {
"id": "ledger_8b2b3028",
"type": "EventName-01",
"streamId": "aggregate_2f21ad58",
"correlationId": "W0-EVT-01",
"who": "party_1c2cf7d7",
"authority": "mandate_957ff50e",
"occurredAt": "2027-01-20T00:00:00.000Z",
"recordedAt": "2027-01-20T00:00:00.000Z",
"payload": "pointers-705e37fd"
},
"evidence": {
"id": "ledger_8b2b3028",
"type": "EventName-01",
"streamId": "aggregate_2f21ad58",
"correlationId": "W0-EVT-01",
"who": "party_1c2cf7d7",
"authority": "mandate_957ff50e",
"occurredAt": "2027-01-20T00:00:00.000Z",
"recordedAt": "2027-01-20T00:00:00.000Z",
"payload": "pointers-705e37fd"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ledger-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}post
ledger.post · POST /ledgers/post · gate offer · sandbox · answers LedgerPost@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /19XFC1F91HE019415 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Ledger.posted@1.
import { ledger } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await ledger.post({"vin":"19XFC1F91HE019415"})curl -X POST https://apis.vin/ledgers/post \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F91HE019415"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "LedgerPost@1",
"value": {
"vin": "19XFC1F91HE019415",
"batchId": "glb_e7ac2a77",
"entries": [
{
"account": "loan-receivable:new-note",
"side": "debit",
"amount": {
"currency": "USD",
"minorUnits": 1513893
}
},
{
"account": "payoff-clearing:lienholder",
"side": "credit",
"amount": {
"currency": "USD",
"minorUnits": 1513893
}
}
],
"totals": {
"debits": {
"currency": "USD",
"minorUnits": 1513893
},
"credits": {
"currency": "USD",
"minorUnits": 1513893
}
},
"balanced": true,
"basis": {
"payoffReference": "poq_4d14a5c0",
"lienholder": "Huntington National Bank"
},
"status": "Posted"
},
"evidence": {
"vin": "19XFC1F91HE019415",
"batchId": "glb_e7ac2a77",
"entries": [
{
"account": "loan-receivable:new-note",
"side": "debit",
"amount": {
"currency": "USD",
"minorUnits": 1513893
}
},
{
"account": "payoff-clearing:lienholder",
"side": "credit",
"amount": {
"currency": "USD",
"minorUnits": 1513893
}
}
],
"totals": {
"debits": {
"currency": "USD",
"minorUnits": 1513893
},
"credits": {
"currency": "USD",
"minorUnits": 1513893
}
},
"balanced": true,
"basis": {
"payoffReference": "poq_4d14a5c0",
"lienholder": "Huntington National Bank"
},
"status": "Posted"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "refi-journey-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Data model
The record shape behind this noun — one entity, each property an evidence field. See the whole estate model on the data model page.
LedgerEvent
Schema
| Property | Type | Notes |
|---|---|---|
id | id | evt_ |
type | EventName | PascalNoun.verbedPast@1 |
streamId | ref→aggregate | — |
correlationId | W0-EVT | the spine |
who | ref→Party | attested |
authority | ref→Mandate | — |
occurredAt | datetime | bitemporal |
recordedAt | datetime | bitemporal |
payload | pointers | no PII, no attrs |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
ledger | deal | *:1 | streamed on |
ledger | mandate | *:0..1 | authority |
ledger | party | *:1 | who (attested) |
ledger | mandate | *:1 | capability→mandate/connection provenance (which credential ran this leaf) |
deal | ledger | *:* | workflow step→lifecycle event/state (steps[] carry no guard/event/state edge) |
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 4 diagrams, rendered from the estate model.
Ledger · Class model
Ledger · Sequence
Ledger · Class model
Ledger · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.