signing
The signing noun — identity, lifecycle, events, and every capability as an anchored section: 11 capabilities, 0 live, 11 sandbox, 0 declared.
signing is one of the estate's 317 automotive nouns — a job a car needs done. It carries 11 capabilities: 0 live, 11 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | signing |
| Pillar | Services (facets: 3 data · 5 services · 3 commerce) |
| Capabilities | 11 — 0 live · 11 sandbox · 0 declared |
| Entities | SignatureCeremony |
| Doors | aggregator.vin |
| SDK | Vin.signing.* from apis.vin |
| Address | /catalog/signing#{action} — the anchor IS the wire name minus signing. |
Events
The vocabulary this noun can append to the record — 17 past-tense, versioned event types, each linked to the capability that emits it:
Signing.agentDispatched@1— emitted bydispatchAgentSigning.collectSignaturesRequested@1— emitted bycollectSignaturesSigning.completeRequested@1— emitted bycompleteSigning.completed@1— emitted bycompleteSigning.dispatchAgentRequested@1— emitted bydispatchAgentSigning.feeCharged@1— emitted byfeeSigning.feeRequested@1— emitted byfeeSigning.paid@1— emitted bypaySigning.payFailed@1— emitted bypaySigning.payRequested@1— emitted bypaySigning.quoteRequested@1— emitted byquoteSigning.quoted@1— emitted byquoteSigning.scheduleRequested@1— emitted byscheduleSigning.scheduled@1— emitted byscheduleSigning.signaturesCollected@1— emitted bycollectSignaturesSigning.witnessRequested@1— emitted bywitnessSigning.witnessed@1— emitted bywitness
Discover & read
status
signing.status · GET /signings/status · gate none · sandbox · answers SigningStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /19XFC1F72LE208310 (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 { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.status({"vin":"19XFC1F72LE208310"})curl 'https://apis.vin/signings/status?vin=19XFC1F72LE208310'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": "SigningStatus@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"ceremony": {
"id": "SGN-61323c66",
"packet": {
"packetId": "DOC-5fe9cfdc",
"kind": "vehicle-record",
"position": "Draft",
"subject": {
"dealId": "DL-09a0aafd",
"position": "QUOTED"
}
},
"standing": "not-yet-routed",
"position": "Draft"
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"ceremony": {
"id": "SGN-61323c66",
"packet": {
"packetId": "DOC-5fe9cfdc",
"kind": "vehicle-record",
"position": "Draft",
"subject": {
"dealId": "DL-09a0aafd",
"position": "QUOTED"
}
},
"standing": "not-yet-routed",
"position": "Draft"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}packageLookup
signing.packageLookup · GET /signings/package-lookup · gate none · sandbox · answers SigningPackageLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /19XFC1F72LE208310 (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 { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.packageLookup({"vin":"19XFC1F72LE208310"})curl 'https://apis.vin/signings/package-lookup?vin=19XFC1F72LE208310'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": "SigningPackageLookup@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"package": {
"packetId": "DOC-5fe9cfdc",
"kind": "vehicle-record",
"position": "Draft",
"subject": {
"dealId": "DL-09a0aafd",
"position": "QUOTED"
}
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"package": {
"packetId": "DOC-5fe9cfdc",
"kind": "vehicle-record",
"position": "Draft",
"subject": {
"dealId": "DL-09a0aafd",
"position": "QUOTED"
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}completenessCheck
signing.completenessCheck · GET /signings/completeness-check · gate none · sandbox · answers SigningCompletenessCheck@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /19XFC1F72LE208310 (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 { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.completenessCheck({"vin":"19XFC1F72LE208310"})curl 'https://apis.vin/signings/completeness-check?vin=19XFC1F72LE208310'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": "SigningCompletenessCheck@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"completeness": {
"complete": false,
"standing": "not-yet-routed",
"position": "Draft",
"checks": [
{
"check": "packet-on-file",
"pass": true
},
{
"check": "routed-for-signature",
"pass": false
},
{
"check": "all-signers-signed",
"pass": false
}
],
"signers": [
{
"role": "buyer",
"identityId": "ID-11f17424",
"name": "Ava Good",
"status": "not-yet-requested"
},
{
"role": "seller",
"identityId": "DLR-b9066ade",
"name": "The Estate Store",
"status": "not-yet-requested"
}
]
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"completeness": {
"complete": false,
"standing": "not-yet-routed",
"position": "Draft",
"checks": [
{
"check": "packet-on-file",
"pass": true
},
{
"check": "routed-for-signature",
"pass": false
},
{
"check": "all-signers-signed",
"pass": false
}
],
"signers": [
{
"role": "buyer",
"identityId": "ID-11f17424",
"name": "Ava Good",
"status": "not-yet-requested"
},
{
"role": "seller",
"identityId": "DLR-b9066ade",
"name": "The Estate Store",
"status": "not-yet-requested"
}
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
signing.quote · POST /signings/quote · gate offer · sandbox · answers SigningQuote@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) · /19XFC1F72LE208310 (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 — Signing.quoteRequested@1 · Signing.quoted@1.
import { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.quote({"vin":"19XFC1F72LE208310"})curl -X POST https://apis.vin/signings/quote \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F72LE208310"}'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": "SigningQuote@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"fee": {
"amountCents": 7500,
"currency": "USD",
"per": "ceremony"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"fee": {
"amountCents": 7500,
"currency": "USD",
"per": "ceremony"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}fee
signing.fee · POST /signings/fee · gate offer · sandbox · answers SigningFee@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) · /19XFC1F72LE208310 (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 — Signing.feeCharged@1 · Signing.feeRequested@1.
import { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.fee({"vin":"19XFC1F72LE208310"})curl -X POST https://apis.vin/signings/fee \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F72LE208310"}'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": "SigningFee@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"fee": {
"amountCents": 7500,
"currency": "USD",
"per": "ceremony"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"fee": {
"amountCents": 7500,
"currency": "USD",
"per": "ceremony"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
schedule
signing.schedule · POST /signings/schedule · gate offer · sandbox · answers SigningSchedule@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) · /19XFC1F72LE208310 (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 — Signing.scheduleRequested@1 · Signing.scheduled@1.
import { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.schedule({"vin":"19XFC1F72LE208310"})curl -X POST https://apis.vin/signings/schedule \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F72LE208310"}'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": "SigningSchedule@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"session": {
"id": "SGN-61323c66",
"packetId": "DOC-5fe9cfdc",
"status": "scheduled",
"scheduledFor": "2026-08-11"
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"session": {
"id": "SGN-61323c66",
"packetId": "DOC-5fe9cfdc",
"status": "scheduled",
"scheduledFor": "2026-08-11"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
signing.pay · POST /signings/pay · gate offer · sandbox · answers SigningPay@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) · /19XFC1F72LE208310 (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 — Signing.paid@1 · Signing.payFailed@1 · Signing.payRequested@1.
import { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.pay({"vin":"19XFC1F72LE208310"})curl -X POST https://apis.vin/signings/pay \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F72LE208310"}'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": "SigningPay@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"payment": {
"id": "PAY-93595e58",
"amountCents": 7500,
"currency": "USD",
"status": "settled"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"payment": {
"id": "PAY-93595e58",
"amountCents": 7500,
"currency": "USD",
"status": "settled"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
complete
signing.complete · POST /signings/complete · gate offer · sandbox · answers SigningComplete@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) · /19XFC1F72LE208310 (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 — Signing.completeRequested@1 · Signing.completed@1.
import { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.complete({"vin":"19XFC1F72LE208310"})curl -X POST https://apis.vin/signings/complete \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F72LE208310"}'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": "SigningComplete@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"completion": {
"status": "signatures-not-collected",
"standing": "not-yet-routed",
"position": "Draft"
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"completion": {
"status": "signatures-not-collected",
"standing": "not-yet-routed",
"position": "Draft"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
collectSignatures
signing.collectSignatures · POST /signings/collect-signatures · gate offer · sandbox · answers SigningCollectSignatures@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) · /19XFC1F72LE208310 (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 — Signing.collectSignaturesRequested@1 · Signing.signaturesCollected@1.
import { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.collectSignatures({"vin":"19XFC1F72LE208310"})curl -X POST https://apis.vin/signings/collect-signatures \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F72LE208310"}'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": "SigningCollectSignatures@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"collection": {
"status": "packet-not-routed",
"position": "Draft"
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"collection": {
"status": "packet-not-routed",
"position": "Draft"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}dispatchAgent
signing.dispatchAgent · POST /signings/dispatch-agent · gate offer · sandbox · answers SigningDispatchAgent@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) · /19XFC1F72LE208310 (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 — Signing.agentDispatched@1 · Signing.dispatchAgentRequested@1.
import { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.dispatchAgent({"vin":"19XFC1F72LE208310"})curl -X POST https://apis.vin/signings/dispatch-agent \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F72LE208310"}'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": "SigningDispatchAgent@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"dispatch": {
"status": "agent-dispatched",
"id": "AGT-38c8954b",
"ceremonyId": "SGN-61323c66",
"packetId": "DOC-5fe9cfdc",
"arrivesOn": "2026-08-11"
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"dispatch": {
"status": "agent-dispatched",
"id": "AGT-38c8954b",
"ceremonyId": "SGN-61323c66",
"packetId": "DOC-5fe9cfdc",
"arrivesOn": "2026-08-11"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}witness
signing.witness · POST /signings/witness · gate offer · sandbox · answers SigningWitness@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) · /19XFC1F72LE208310 (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 — Signing.witnessRequested@1 · Signing.witnessed@1.
import { signing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await signing.witness({"vin":"19XFC1F72LE208310"})curl -X POST https://apis.vin/signings/witness \
-H 'content-type: application/json' \
-d '{"vin":"19XFC1F72LE208310"}'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": "SigningWitness@1",
"value": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"witness": {
"status": "nothing-to-witness",
"standing": "not-yet-routed",
"position": "Draft"
}
},
"evidence": {
"vin": "19XFC1F72LE208310",
"noun": "signing",
"asOf": "2026-08-10",
"witness": {
"status": "nothing-to-witness",
"standing": "not-yet-routed",
"position": "Draft"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "signing-desk-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.
SignatureCeremony
Schema
| Property | Type |
|---|---|
id | id |
packetId | ref→Document |
subjectId | ref→Deal |
signers | Signer[] |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
document | signing | 1:0..* | signed via |
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 3 diagrams, rendered from the estate model.
Signing · Class model
Signing · State machine
Signing · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
settlementStatement
The settlementStatement noun — identity, lifecycle, events, and every capability as an anchored section: 4 capabilities, 0 live, 4 sandbox, 0 declared.
subrogation
The subrogation noun — identity, lifecycle, events, and every capability as an anchored section: 2 capabilities, 0 live, 2 sandbox, 0 declared.