approval
The approval noun — identity, lifecycle, events, and every capability as an anchored section: 12 capabilities, 0 live, 12 sandbox, 0 declared.
approval is one of the estate's 317 automotive nouns — a job a car needs done. It carries 12 capabilities: 0 live, 12 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | approval |
| Pillar | Services (facets: 3 data · 6 services · 3 commerce) |
| Capabilities | 12 — 0 live · 12 sandbox · 0 declared |
| Entities | Estimate |
| Doors | aggregator.vin |
| SDK | Vin.approval.* from apis.vin |
| Address | /catalog/approval#{action} — the anchor IS the wire name minus approval. |
Events
The vocabulary this noun can append to the record — 20 past-tense, versioned event types, each linked to the capability that emits it:
Approval.authorizeChargeRequested@1— emitted byauthorizeChargeApproval.authorizeCharged@1— emitted byauthorizeChargeApproval.captureSignatureRequested@1— emitted bycaptureSignatureApproval.declineRequested@1— emitted bydeclineApproval.declined@1— emitted bydeclineApproval.depositRequested@1— emitted bydepositApproval.deposited@1— emitted bydepositApproval.paid@1— emitted bypayApproval.payFailed@1— emitted bypayApproval.payRequested@1— emitted bypayApproval.recordFailed@1— emitted byrecordApproval.recordRequested@1— emitted byrecordApproval.recorded@1— emitted byrecordApproval.remindRequested@1— emitted byremindApproval.reminded@1— emitted byremindApproval.requestRequested@1— emitted byrequestApproval.requested@1— emitted byrequestApproval.sendRequested@1— emitted bysendApproval.sent@1— emitted bysendApproval.signatureCaptured@1— emitted bycaptureSignature
Discover & read
history
approval.history · GET /approvals/history · gate none · sandbox · answers ApprovalHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FG1R79G0181145 (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 { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.history({"vin":"1G1FG1R79G0181145"})curl 'https://apis.vin/approvals/history?vin=1G1FG1R79G0181145'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": "ApprovalHistory@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"events": [
{
"date": "2026-08-01",
"kind": "estimate-built",
"id": "EST-a436637f"
}
]
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"events": [
{
"date": "2026-08-01",
"kind": "estimate-built",
"id": "EST-a436637f"
}
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}status
approval.status · GET /approvals/status · gate none · sandbox · answers ApprovalStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FG1R79G0181145 (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 { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.status({"vin":"1G1FG1R79G0181145"})curl 'https://apis.vin/approvals/status?vin=1G1FG1R79G0181145'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": "ApprovalStatus@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"approval": {
"id": "EST-a436637f",
"stance": "Built",
"totalCents": 199041,
"currency": "USD"
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"approval": {
"id": "EST-a436637f",
"stance": "Built",
"totalCents": 199041,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
request
approval.request · POST /approvals/request · gate offer · sandbox · answers ApprovalRequest@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) · /1G1FG1R79G0181145 (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 — Approval.requestRequested@1 · Approval.requested@1.
import { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.request({"vin":"1G1FG1R79G0181145"})curl -X POST https://apis.vin/approvals/request \
-H 'content-type: application/json' \
-d '{"vin":"1G1FG1R79G0181145"}'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": "ApprovalRequest@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"request": {
"status": "requested",
"id": "EST-a436637f",
"requestedOf": "Ava Good",
"amountCents": 199041,
"currency": "USD"
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"request": {
"status": "requested",
"id": "EST-a436637f",
"requestedOf": "Ava Good",
"amountCents": 199041,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
approval.pay · POST /approvals/pay · gate offer · sandbox · answers ApprovalPay@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) · /1G1FG1R79G0181145 (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 — Approval.paid@1 · Approval.payFailed@1 · Approval.payRequested@1.
import { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.pay({"vin":"1G1FG1R79G0181145"})curl -X POST https://apis.vin/approvals/pay \
-H 'content-type: application/json' \
-d '{"vin":"1G1FG1R79G0181145"}'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": "ApprovalPay@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"payment": {
"status": "refused",
"reason": "nothing-approved-to-pay",
"id": "EST-a436637f",
"stance": "Built"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"payment": {
"status": "refused",
"reason": "nothing-approved-to-pay",
"id": "EST-a436637f",
"stance": "Built"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}deposit
approval.deposit · POST /approvals/deposit · gate offer · sandbox · answers ApprovalDeposit@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) · /1G1FG1R79G0181145 (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 — Approval.depositRequested@1 · Approval.deposited@1.
import { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.deposit({"vin":"1G1FG1R79G0181145"})curl -X POST https://apis.vin/approvals/deposit \
-H 'content-type: application/json' \
-d '{"vin":"1G1FG1R79G0181145"}'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": "ApprovalDeposit@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"deposit": {
"id": "ED-70c6c4d9",
"amountCents": 19904,
"currency": "USD",
"status": "held"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"deposit": {
"id": "ED-70c6c4d9",
"amountCents": 19904,
"currency": "USD",
"status": "held"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}authorizeCharge
approval.authorizeCharge · POST /approvals/authorize-charge · gate offer · sandbox · answers ApprovalAuthorizeCharge@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) · /1G1FG1R79G0181145 (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 — Approval.authorizeChargeRequested@1 · Approval.authorizeCharged@1.
import { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.authorizeCharge({"vin":"1G1FG1R79G0181145"})curl -X POST https://apis.vin/approvals/authorize-charge \
-H 'content-type: application/json' \
-d '{"vin":"1G1FG1R79G0181145"}'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": "ApprovalAuthorizeCharge@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"authorization": {
"status": "refused",
"reason": "nothing-approved-to-authorize",
"id": "EST-a436637f",
"stance": "Built"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"authorization": {
"status": "refused",
"reason": "nothing-approved-to-authorize",
"id": "EST-a436637f",
"stance": "Built"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
remind
approval.remind · POST /approvals/remind · gate offer · sandbox · answers ApprovalRemind@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) · /1G1FG1R79G0181145 (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 — Approval.remindRequested@1 · Approval.reminded@1.
import { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.remind({"vin":"1G1FG1R79G0181145"})curl -X POST https://apis.vin/approvals/remind \
-H 'content-type: application/json' \
-d '{"vin":"1G1FG1R79G0181145"}'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": "ApprovalRemind@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"reminder": {
"status": "reminded",
"id": "EST-a436637f",
"to": "Ava Good",
"channel": "email"
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"reminder": {
"status": "reminded",
"id": "EST-a436637f",
"to": "Ava Good",
"channel": "email"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}send
approval.send · POST /approvals/send · gate offer · sandbox · answers ApprovalSend@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) · /1G1FG1R79G0181145 (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 — Approval.sendRequested@1 · Approval.sent@1.
import { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.send({"vin":"1G1FG1R79G0181145"})curl -X POST https://apis.vin/approvals/send \
-H 'content-type: application/json' \
-d '{"vin":"1G1FG1R79G0181145"}'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": "ApprovalSend@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"delivery": {
"id": "EST-a436637f",
"to": "Ava Good",
"channel": "email",
"status": "sent"
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"delivery": {
"id": "EST-a436637f",
"to": "Ava Good",
"channel": "email",
"status": "sent"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Authorize & resolve
decline
approval.decline · POST /approvals/decline · gate offer · sandbox · answers ApprovalDecline@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) · /1G1FG1R79G0181145 (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 — Approval.declineRequested@1 · Approval.declined@1.
import { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.decline({"vin":"1G1FG1R79G0181145"})curl -X POST https://apis.vin/approvals/decline \
-H 'content-type: application/json' \
-d '{"vin":"1G1FG1R79G0181145"}'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": "ApprovalDecline@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"decline": {
"status": "declined",
"id": "EST-a436637f"
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"decline": {
"status": "declined",
"id": "EST-a436637f"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}threshold
approval.threshold · GET /approvals/threshold · gate none · sandbox · answers ApprovalThreshold@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FG1R79G0181145 (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 { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.threshold({"vin":"1G1FG1R79G0181145"})curl 'https://apis.vin/approvals/threshold?vin=1G1FG1R79G0181145'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": "ApprovalThreshold@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"threshold": {
"thresholdCents": 100000,
"currency": "USD",
"totalCents": 199041,
"requiresApproval": true
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"threshold": {
"thresholdCents": 100000,
"currency": "USD",
"totalCents": 199041,
"requiresApproval": true
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
captureSignature
approval.captureSignature · POST /approvals/capture-signature · gate offer · sandbox · answers ApprovalCaptureSignature@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) · /1G1FG1R79G0181145 (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 — Approval.captureSignatureRequested@1 · Approval.signatureCaptured@1.
import { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.captureSignature({"vin":"1G1FG1R79G0181145"})curl -X POST https://apis.vin/approvals/capture-signature \
-H 'content-type: application/json' \
-d '{"vin":"1G1FG1R79G0181145"}'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": "ApprovalCaptureSignature@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"signature": {
"status": "no-decision-to-sign",
"id": "EST-a436637f",
"stance": "Built"
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"signature": {
"status": "no-decision-to-sign",
"id": "EST-a436637f",
"stance": "Built"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}record
approval.record · POST /approvals/record · gate offer · sandbox · answers ApprovalRecord@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) · /1G1FG1R79G0181145 (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 — Approval.recordFailed@1 · Approval.recordRequested@1 · Approval.recorded@1.
import { approval } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await approval.record({"vin":"1G1FG1R79G0181145"})curl -X POST https://apis.vin/approvals/record \
-H 'content-type: application/json' \
-d '{"vin":"1G1FG1R79G0181145"}'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": "ApprovalRecord@1",
"value": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"approval": {
"status": "approved",
"id": "EST-a436637f",
"approvedCents": 199041,
"currency": "USD"
}
},
"evidence": {
"vin": "1G1FG1R79G0181145",
"noun": "approval",
"asOf": "2026-08-10",
"approval": {
"status": "approved",
"id": "EST-a436637f",
"approvedCents": 199041,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-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.
Estimate
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 2 diagrams, rendered from the estate model.
Approval · Class model
Approval · State machine
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
appointment
The appointment noun — identity, lifecycle, events, and every capability as an anchored section: 21 capabilities, 0 live, 21 sandbox, 0 declared.
arbitration
The arbitration noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 0 live, 14 sandbox, 0 declared.