docs.vin

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

Nounlease
PillarServices (facets: 7 data · 8 services · 2 commerce)
Capabilities17 — 0 live · 17 sandbox · 0 declared
EntitiesLease
Doorsaggregator.vin · lease.vin
SDKVin.lease.* from apis.vin
Address/catalog/lease#{action} — the anchor IS the wire name minus lease.

Lifecycle

LeaseLeaseFSM: 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:

Quote & price

terms

lease.terms · GET /leases/terms · gate none · sandbox · answers LeaseTerms@1

FieldTypeRequiredNotes
vinstringno

Doorlease.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.

the SDK — lease.terms
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"})
GET /leases/terms
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.

receipt · executed 2026-08-17T12:42:13.240Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

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.

Doorlease.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.

EmitsLease.dispositionFeeAssessed@1 · Lease.failed@1.

the SDK — lease.dispositionFee
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"})
POST /leases/disposition-fee
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.

receipt · executed 2026-08-17T12:42:13.221Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringyes
structureobjectyes
subjectstringno
authoritystringno

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.

Doorlease.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.

EmitsLease.funded@1 · Lease.originated@1.

the SDK — lease.originate
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":{}})
POST /leases/originate
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.

receipt · executed 2026-08-17T12:42:13.234Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

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.

Doorlease.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.

EmitsLease.failed@1 · Lease.funded@1.

the SDK — lease.fund
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"})
POST /leases/fund
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.

receipt · executed 2026-08-17T12:42:13.229Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringyes
dispositionstringnoone of ground, buyout, earlyTermination, pullAhead
odometerintegerno
inspectionstringno

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.

Doorlease.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.

EmitsLease.boughtOut@1 · Lease.earlyTerminated@1 · Lease.grounded@1 · Lease.pulledAhead@1 · Lease.returned@1 · WearTear.assessed@1.

the SDK — lease.return
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"})
POST /leases/return
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.

receipt · executed 2026-08-17T12:42:13.239Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

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.

Doorlease.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.

EmitsLease.disclosed@1.

the SDK — lease.disclose
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"})
POST /leases/disclose
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.

receipt · executed 2026-08-17T12:42:13.215Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Doorlease.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.

the SDK — lease.buyout
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"})
GET /leases/buyout
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.

receipt · executed 2026-08-17T12:42:13.209Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

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.

Doorlease.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.

EmitsLease.contracted@1.

the SDK — lease.contract
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"})
POST /leases/contract
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.

receipt · executed 2026-08-17T12:42:13.213Z · HTTP 200
{
  "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.

Dooraggregator.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.

EmitsWearTear.disputed@1.

the SDK — lease.disputeWear
import { lease } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.disputeWear()
POST /leases/dispute-wear
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.

receipt · executed 2026-08-16T14:50:09.897Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Doorlease.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.

the SDK — lease.earlyTermination
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"})
GET /leases/early-termination
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.

receipt · executed 2026-08-17T12:42:13.222Z · HTTP 200
{
  "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.

Dooraggregator.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.

EmitsLease.masterLeased@1.

the SDK — lease.masterLease
import { lease } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.masterLease()
POST /leases/master-lease
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.

receipt · executed 2026-08-16T14:50:09.898Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Doorlease.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.

the SDK — lease.maturity
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"})
GET /leases/maturity
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.

receipt · executed 2026-08-17T12:42:13.233Z · HTTP 200
{
  "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.

Dooraggregator.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.

EmitsLease.maturityAlerted@1.

the SDK — lease.maturityAlert
import { lease } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.maturityAlert()
POST /leases/maturity-alert
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.

receipt · executed 2026-08-16T14:50:09.898Z · HTTP 200
{
  "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.

Dooraggregator.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.

the SDK — lease.mileageProject
import { lease } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lease.mileageProject()
GET /leases/mileage-project
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.

receipt · executed 2026-08-16T14:50:09.898Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Doorlease.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.

the SDK — lease.payment
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"})
GET /leases/payment
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.

receipt · executed 2026-08-17T12:42:13.234Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Doorlease.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.

the SDK — lease.pullAhead
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"})
GET /leases/pull-ahead
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.

receipt · executed 2026-08-17T12:42:13.235Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

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.

Doorlease.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.

EmitsLease.wearAssessed@1.

the SDK — lease.wearTear
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"})
POST /leases/wear-tear
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.

receipt · executed 2026-08-17T12:42:13.240Z · HTTP 200
{
  "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

PropertyTypeNotes
ididlea_
vinstring
residualmoney
moneyFactordecimal
termint
mileageAllowanceint
dispositionenum
statusLeaseFSM

Relationships

FromToCardinalityAs
deallease1:0..1leased

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.