lenderProgram
The lenderProgram noun — identity, lifecycle, events, and every capability as an anchored section: 9 capabilities, 0 live, 9 sandbox, 0 declared.
lenderProgram is one of the estate's 317 automotive nouns — a job a car needs done. It carries 9 capabilities: 0 live, 9 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | lenderProgram |
| Pillar | Data (facets: 8 data · 1 services) |
| Capabilities | 9 — 0 live · 9 sandbox · 0 declared |
| Entities | Lender |
| Doors | aggregator.vin |
| SDK | Vin.lenderProgram.* from apis.vin |
| Address | /catalog/lenderProgram#{action} — the anchor IS the wire name minus lenderProgram. |
Events
The vocabulary this noun can append to the record — 1 past-tense, versioned event type, each linked to the capability that emits it:
LenderProgram.enrolled@1— emitted byenroll
Quote & price
fee
lenderProgram.fee · GET /lender-programs/fee · gate none · sandbox · answers LenderProgramFee@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FH3D76H0107148 (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 { lenderProgram } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lenderProgram.fee({"vin":"1G1FH3D76H0107148"})curl 'https://apis.vin/lender-programs/fee?vin=1G1FH3D76H0107148'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": "LenderProgramFee@1",
"value": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"fee": {
"status": "no-program-fee-posted"
}
},
"evidence": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"fee": {
"status": "no-program-fee-posted"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lending-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
reserve
lenderProgram.reserve · GET /lender-programs/reserve · gate key · sandbox · answers LenderProgramReserve@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FH3D76H0107148 (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 { lenderProgram } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lenderProgram.reserve({"vin":"1G1FH3D76H0107148"})curl 'https://apis.vin/lender-programs/reserve?vin=1G1FH3D76H0107148'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": "LenderProgramReserve@1",
"value": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"reserve": {
"amountCents": 34500,
"currency": "USD",
"basis": "rate-spread",
"basisPoints": 150
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"reserve": {
"amountCents": 34500,
"currency": "USD",
"basis": "rate-spread",
"basisPoints": 150
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lending-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}enroll
lenderProgram.enroll · POST /lender-programs/enroll · gate offer · sandbox · answers LenderProgramEnroll@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) · /1G1FH3D76H0107148 (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 — LenderProgram.enrolled@1.
import { lenderProgram } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lenderProgram.enroll({"vin":"1G1FH3D76H0107148"})curl -X POST https://apis.vin/lender-programs/enroll \
-H 'content-type: application/json' \
-d '{"vin":"1G1FH3D76H0107148"}'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": "LenderProgramEnroll@1",
"value": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"enrollment": {
"id": "LPE-def323cd",
"status": "enrolled",
"programCount": 4
}
},
"evidence": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"enrollment": {
"id": "LPE-def323cd",
"status": "enrolled",
"programCount": 4
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lending-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
advance
lenderProgram.advance · GET /lender-programs/advance · gate key · sandbox · answers LenderProgramAdvance@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FH3D76H0107148 (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 { lenderProgram } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lenderProgram.advance({"vin":"1G1FH3D76H0107148"})curl 'https://apis.vin/lender-programs/advance?vin=1G1FH3D76H0107148'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": "LenderProgramAdvance@1",
"value": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"advance": {
"amountCents": 2300000,
"currency": "USD",
"basis": "funding-parity"
}
},
"evidence": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"advance": {
"amountCents": 2300000,
"currency": "USD",
"basis": "funding-parity"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lending-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}flat
lenderProgram.flat · GET /lender-programs/flat · gate none · sandbox · answers LenderProgramFlat@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FH3D76H0107148 (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 { lenderProgram } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lenderProgram.flat({"vin":"1G1FH3D76H0107148"})curl 'https://apis.vin/lender-programs/flat?vin=1G1FH3D76H0107148'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": "LenderProgramFlat@1",
"value": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"flat": {
"offered": false,
"participation": "rate-spread",
"reason": "no-flat-schedule-posted"
}
},
"evidence": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"flat": {
"offered": false,
"participation": "rate-spread",
"reason": "no-flat-schedule-posted"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lending-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}incentive
lenderProgram.incentive · GET /lender-programs/incentive · gate key · sandbox · answers LenderProgramIncentive@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FH3D76H0107148 (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 { lenderProgram } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lenderProgram.incentive({"vin":"1G1FH3D76H0107148"})curl 'https://apis.vin/lender-programs/incentive?vin=1G1FH3D76H0107148'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": "LenderProgramIncentive@1",
"value": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"incentive": {
"status": "no-incentive-posted"
}
},
"evidence": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"incentive": {
"status": "no-incentive-posted"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lending-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}matrix
lenderProgram.matrix · GET /lender-programs/matrix · gate key · sandbox · answers LenderProgramMatrix@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FH3D76H0107148 (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 { lenderProgram } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lenderProgram.matrix({"vin":"1G1FH3D76H0107148"})curl 'https://apis.vin/lender-programs/matrix?vin=1G1FH3D76H0107148'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": "LenderProgramMatrix@1",
"value": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"matrix": {
"termMonths": 72,
"cells": [
{
"tier": "A+",
"termMonths": 72,
"apr": 5.9
},
{
"tier": "A",
"termMonths": 72,
"apr": 6.9
},
{
"tier": "B",
"termMonths": 72,
"apr": 9.4
},
{
"tier": "C",
"termMonths": 72,
"apr": 12.9
}
]
}
},
"evidence": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"matrix": {
"termMonths": 72,
"cells": [
{
"tier": "A+",
"termMonths": 72,
"apr": 5.9
},
{
"tier": "A",
"termMonths": 72,
"apr": 6.9
},
{
"tier": "B",
"termMonths": 72,
"apr": 9.4
},
{
"tier": "C",
"termMonths": 72,
"apr": 12.9
}
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lending-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}rateCard
lenderProgram.rateCard · GET /lender-programs/rate-card · gate key · sandbox · answers LenderProgramRateCard@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FH3D76H0107148 (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 { lenderProgram } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lenderProgram.rateCard({"vin":"1G1FH3D76H0107148"})curl 'https://apis.vin/lender-programs/rate-card?vin=1G1FH3D76H0107148'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": "LenderProgramRateCard@1",
"value": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"rateCard": {
"termMonths": 72,
"tiers": [
{
"tier": "A+",
"apr": 5.9
},
{
"tier": "A",
"apr": 6.9
},
{
"tier": "B",
"apr": 9.4
},
{
"tier": "C",
"apr": 12.9
}
]
}
},
"evidence": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"rateCard": {
"termMonths": 72,
"tiers": [
{
"tier": "A+",
"apr": 5.9
},
{
"tier": "A",
"apr": 6.9
},
{
"tier": "B",
"apr": 9.4
},
{
"tier": "C",
"apr": 12.9
}
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lending-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}subvention
lenderProgram.subvention · GET /lender-programs/subvention · gate key · sandbox · answers LenderProgramSubvention@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1G1FH3D76H0107148 (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 { lenderProgram } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lenderProgram.subvention({"vin":"1G1FH3D76H0107148"})curl 'https://apis.vin/lender-programs/subvention?vin=1G1FH3D76H0107148'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": "LenderProgramSubvention@1",
"value": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"subvention": {
"subvented": false,
"status": "no-subvention-posted"
}
},
"evidence": {
"vin": "1G1FH3D76H0107148",
"noun": "lenderProgram",
"asOf": "2026-08-10",
"programs": [
{
"tier": "A+",
"apr": 5.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "A",
"apr": 6.9,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "B",
"apr": 9.4,
"termMonths": 72,
"participation": "rate-spread"
},
{
"tier": "C",
"apr": 12.9,
"termMonths": 72,
"participation": "rate-spread"
}
],
"subvention": {
"subvented": false,
"status": "no-subvention-posted"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "lending-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.
Lender
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. One diagram, rendered from the estate model.
LenderProgram · Class model
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.