lease
The lease noun — identity, lifecycle, events, and every capability as an anchored section: 17 capabilities, 0 live, 17 sandbox, 0 declared.
lease is one of the estate's 317 automotive nouns — a job a car needs done. It carries 17 capabilities: 0 live, 17 sandbox, 0 declared · doors lease.vin · aggregator.vin.
Identity
| Noun | lease |
| Pillar | Services (facets: 7 data · 8 services · 2 commerce) |
| Capabilities | 17 — 0 live · 17 sandbox · 0 declared |
| Entities | Lease |
| Doors | aggregator.vin · lease.vin |
| SDK | Vin.lease.* from apis.vin |
| Address | /catalog/lease#{action} — the anchor IS the wire name minus lease. |
Lifecycle
Lease — LeaseFSM: 7 states, 9 transitions — Originated · Active · Returned · EarlyTerminated · PullAhead · WearDisputed · Disposed. Each transition is a past-tense event on the record.
Events
The vocabulary this noun can append to the record — 16 past-tense, versioned event types, each linked to the capability that emits it:
Lease.boughtOut@1— emitted byreturnLease.contracted@1— emitted bycontractLease.disclosed@1— emitted bydiscloseLease.dispositionFeeAssessed@1— emitted bydispositionFeeLease.earlyTerminated@1— emitted byreturnLease.failed@1— emitted bydispositionFee·fundLease.funded@1— emitted byfund·originateLease.grounded@1— emitted byreturnLease.masterLeased@1— emitted bymasterLeaseLease.maturityAlerted@1— emitted bymaturityAlertLease.originated@1— emitted byoriginateLease.pulledAhead@1— emitted byreturnLease.returned@1— emitted byreturnLease.wearAssessed@1— emitted bywearTearWearTear.assessed@1— emitted byreturnWearTear.disputed@1— emitted bydisputeWear
Quote & price
terms
lease.terms · GET /leases/terms · gate none · sandbox · answers LeaseTerms@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.terms({"vin":"3VW5W7BU5TM020983"})curl 'https://apis.vin/leases/terms?vin=3VW5W7BU5TM020983'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": "LeaseTerms@1",
"value": {
"termMonths": 36,
"residualPct": 0.58,
"moneyFactor": 0.0025,
"annualMileage": 12000,
"excessMileageRate": {
"amount": "0.25",
"currency": "USD"
},
"dispositionFee": {
"amount": "395.00",
"currency": "USD"
},
"acquisitionFee": {
"amount": "895.00",
"currency": "USD"
}
},
"evidence": {
"termMonths": 36,
"residualPct": 0.58,
"moneyFactor": 0.0025,
"annualMileage": 12000,
"excessMileageRate": {
"amount": "0.25",
"currency": "USD"
},
"dispositionFee": {
"amount": "395.00",
"currency": "USD"
},
"acquisitionFee": {
"amount": "895.00",
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lease-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}dispositionFee
lease.dispositionFee · POST /leases/disposition-fee · gate offer · sandbox · answers LeaseDispositionFee@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 — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 — Lease.dispositionFeeAssessed@1 · Lease.failed@1.
import { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.dispositionFee({"vin":"3VW5W7BU5TM020983"})curl -X POST https://apis.vin/leases/disposition-fee \
-H 'content-type: application/json' \
-d '{"vin":"3VW5W7BU5TM020983"}'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": "LeaseDispositionFee@1",
"value": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"fee": {
"status": "no-lease-on-file"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"fee": {
"status": "no-lease-on-file"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
originate
lease.originate · POST /leases/originate · gate offer · sandbox · answers LeaseOrigination@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
structure | object | yes | — |
subject | string | no | — |
authority | 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.
Delegated calls require a typed Mandate — { ceiling, perAction, expires, tripwires }; the ceiling is a field, not a conversation.
Door — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 — Lease.funded@1 · Lease.originated@1.
import { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.originate({"vin":"3VW5W7BU5TM020983","structure":{}})curl -X POST https://apis.vin/leases/originate \
-H 'content-type: application/json' \
-d '{"vin":"3VW5W7BU5TM020983","structure":{}}'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": "LeaseOrigination@1",
"value": {
"lease": "lease-3VW5W7BU5TM020983",
"vin": "3VW5W7BU5TM020983",
"msrp": {
"amount": "34995.00",
"currency": "USD"
},
"residual": {
"amount": "20297.10",
"currency": "USD"
},
"termMonths": 36,
"annualMileage": 12000,
"state": "originated"
},
"evidence": {
"lease": "lease-3VW5W7BU5TM020983",
"vin": "3VW5W7BU5TM020983",
"msrp": {
"amount": "34995.00",
"currency": "USD"
},
"residual": {
"amount": "20297.10",
"currency": "USD"
},
"termMonths": 36,
"annualMileage": 12000,
"state": "originated"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lease-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
fund
lease.fund · POST /leases/fund · gate offer · sandbox · answers LeaseFund@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 — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 — Lease.failed@1 · Lease.funded@1.
import { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.fund({"vin":"3VW5W7BU5TM020983"})curl -X POST https://apis.vin/leases/fund \
-H 'content-type: application/json' \
-d '{"vin":"3VW5W7BU5TM020983"}'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": "LeaseFund@1",
"value": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"funding": {
"status": "no-lease-on-file"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"funding": {
"status": "no-lease-on-file"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Lifecycle & state
return
lease.return · POST /leases/return · gate offer · sandbox · answers LeaseReturn@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
disposition | string | no | one of ground, buyout, earlyTermination, pullAhead |
odometer | integer | no | — |
inspection | 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.
Delegated calls require a typed Mandate — { ceiling, perAction, expires, tripwires }; the ceiling is a field, not a conversation.
Door — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 — Lease.boughtOut@1 · Lease.earlyTerminated@1 · Lease.grounded@1 · Lease.pulledAhead@1 · Lease.returned@1 · WearTear.assessed@1.
import { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.return({"vin":"3VW5W7BU5TM020983"})curl -X POST https://apis.vin/leases/return \
-H 'content-type: application/json' \
-d '{"vin":"3VW5W7BU5TM020983"}'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": "LeaseReturn@1",
"value": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"evidence": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}disclose
lease.disclose · POST /leases/disclose · gate offer · sandbox · answers LeaseDisclose@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 — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 — Lease.disclosed@1.
import { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.disclose({"vin":"3VW5W7BU5TM020983"})curl -X POST https://apis.vin/leases/disclose \
-H 'content-type: application/json' \
-d '{"vin":"3VW5W7BU5TM020983"}'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": "LeaseDisclose@1",
"value": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"evidence": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
buyout
lease.buyout · GET /leases/buyout · gate key · sandbox · answers LeaseBuyout@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.buyout({"vin":"3VW5W7BU5TM020983"})curl 'https://apis.vin/leases/buyout?vin=3VW5W7BU5TM020983'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": "LeaseBuyout@1",
"value": {
"residual": {
"amount": "20297.10",
"currency": "USD"
},
"remainingPayments": 0,
"purchaseOptionFee": {
"amount": "350.00",
"currency": "USD"
},
"buyoutAmount": {
"amount": "20647.10",
"currency": "USD"
}
},
"evidence": {
"residual": {
"amount": "20297.10",
"currency": "USD"
},
"remainingPayments": 0,
"purchaseOptionFee": {
"amount": "350.00",
"currency": "USD"
},
"buyoutAmount": {
"amount": "20647.10",
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lease-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}contract
lease.contract · POST /leases/contract · gate offer · sandbox · answers LeaseContract@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 — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 — Lease.contracted@1.
import { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.contract({"vin":"3VW5W7BU5TM020983"})curl -X POST https://apis.vin/leases/contract \
-H 'content-type: application/json' \
-d '{"vin":"3VW5W7BU5TM020983"}'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": "LeaseContract@1",
"value": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"evidence": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}disputeWear
lease.disputeWear · POST /leases/dispute-wear · gate key · sandbox · answers LeaseDisputeWear@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 — WearTear.disputed@1.
import { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.disputeWear()curl -X POST https://apis.vin/leases/dispute-wear \
-H 'content-type: application/json' \
-d '{}'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": "LeaseDisputeWear@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}earlyTermination
lease.earlyTermination · GET /leases/early-termination · gate key · sandbox · answers LeaseEarlyTermination@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.earlyTermination({"vin":"3VW5W7BU5TM020983"})curl 'https://apis.vin/leases/early-termination?vin=3VW5W7BU5TM020983'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": "LeaseEarlyTermination@1",
"value": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"evidence": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}masterLease
lease.masterLease · POST /leases/master-lease · gate key · sandbox · answers LeaseMasterLease@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 — Lease.masterLeased@1.
import { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.masterLease()curl -X POST https://apis.vin/leases/master-lease \
-H 'content-type: application/json' \
-d '{}'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": "LeaseMasterLease@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "lease",
"asOf": "2026-08-10",
"masterLease": {
"id": "ML-bf48cd21",
"lessee": {
"id": "DLR-b9066ade",
"name": "The Estate Store"
},
"status": "active",
"termMonths": 36,
"schedule": [
{
"vin": "1FL0TS0URCE000000",
"leaseId": "lea_22c6a75e"
},
{
"vin": "1FKEEPREG1STERED0",
"leaseId": "lea_1e8e0c77"
},
{
"vin": "1FKEEPM0N1T0R0000",
"leaseId": "lea_c33a814d"
},
{
"vin": "1FKEEPRECALL00000",
"leaseId": "lea_a26e165e"
},
{
"vin": "1FKEEPLAPS1NG0000",
"leaseId": "lea_7a21c029"
},
{
"vin": "1FKEEPLAPSED00000",
"leaseId": "lea_f2c8ad9c"
},
{
"vin": "1FKEEPD1SP0SED000",
"leaseId": "lea_c7243b23"
}
],
"units": 7
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "lease",
"asOf": "2026-08-10",
"masterLease": {
"id": "ML-bf48cd21",
"lessee": {
"id": "DLR-b9066ade",
"name": "The Estate Store"
},
"status": "active",
"termMonths": 36,
"schedule": [
{
"vin": "1FL0TS0URCE000000",
"leaseId": "lea_22c6a75e"
},
{
"vin": "1FKEEPREG1STERED0",
"leaseId": "lea_1e8e0c77"
},
{
"vin": "1FKEEPM0N1T0R0000",
"leaseId": "lea_c33a814d"
},
{
"vin": "1FKEEPRECALL00000",
"leaseId": "lea_a26e165e"
},
{
"vin": "1FKEEPLAPS1NG0000",
"leaseId": "lea_7a21c029"
},
{
"vin": "1FKEEPLAPSED00000",
"leaseId": "lea_f2c8ad9c"
},
{
"vin": "1FKEEPD1SP0SED000",
"leaseId": "lea_c7243b23"
}
],
"units": 7
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}maturity
lease.maturity · GET /leases/maturity · gate none · sandbox · answers LeaseMaturity@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.maturity({"vin":"3VW5W7BU5TM020983"})curl 'https://apis.vin/leases/maturity?vin=3VW5W7BU5TM020983'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": "LeaseMaturity@1",
"value": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"evidence": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}maturityAlert
lease.maturityAlert · POST /leases/maturity-alert · gate key · sandbox · answers LeaseMaturityAlert@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 — Lease.maturityAlerted@1.
import { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.maturityAlert()curl -X POST https://apis.vin/leases/maturity-alert \
-H 'content-type: application/json' \
-d '{}'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": "LeaseMaturityAlert@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}mileageProject
lease.mileageProject · GET /leases/mileage-project · gate none · sandbox · answers LeaseMileageProject@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.mileageProject()curl 'https://apis.vin/leases/mileage-project'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": "LeaseMileageProject@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}payment
lease.payment · GET /leases/payment · gate key · sandbox · answers LeasePayment@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.payment({"vin":"3VW5W7BU5TM020983"})curl 'https://apis.vin/leases/payment?vin=3VW5W7BU5TM020983'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": "LeasePayment@1",
"value": {
"msrp": {
"amount": "34995.00",
"currency": "USD"
},
"capCost": {
"amount": "31245.25",
"currency": "USD"
},
"residual": {
"amount": "20297.10",
"currency": "USD"
},
"termMonths": 36,
"moneyFactor": 0.0025,
"equivalentApr": 6,
"basePayment": {
"amount": "432.97",
"currency": "USD"
}
},
"evidence": {
"msrp": {
"amount": "34995.00",
"currency": "USD"
},
"capCost": {
"amount": "31245.25",
"currency": "USD"
},
"residual": {
"amount": "20297.10",
"currency": "USD"
},
"termMonths": 36,
"moneyFactor": 0.0025,
"equivalentApr": 6,
"basePayment": {
"amount": "432.97",
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lease-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}pullAhead
lease.pullAhead · GET /leases/pull-ahead · gate key · sandbox · answers LeasePullAhead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.pullAhead({"vin":"3VW5W7BU5TM020983"})curl 'https://apis.vin/leases/pull-ahead?vin=3VW5W7BU5TM020983'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": "LeasePullAhead@1",
"value": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"evidence": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}wearTear
lease.wearTear · POST /leases/wear-tear · gate offer · sandbox · answers LeaseWearTear@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 — lease.vin serves this noun on its two routes: / (the landing) · /3VW5W7BU5TM020983 (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 — Lease.wearAssessed@1.
import { lease } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.wearTear({"vin":"3VW5W7BU5TM020983"})curl -X POST https://apis.vin/leases/wear-tear \
-H 'content-type: application/json' \
-d '{"vin":"3VW5W7BU5TM020983"}'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": "LeaseWearTear@1",
"value": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"evidence": {
"vin": "3VW5W7BU5TM020983",
"noun": "lease",
"asOf": "2026-08-10",
"lease": {
"status": "no-lease-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paperwork-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.
Lease
Schema
| Property | Type | Notes |
|---|---|---|
id | id | lea_ |
vin | string | — |
residual | money | — |
moneyFactor | decimal | — |
term | int | — |
mileageAllowance | int | — |
disposition | enum | — |
status | LeaseFSM | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
deal | lease | 1:0..1 | leased |
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.
Lease · Class model
Lease · State machine
Lease · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.