docs.vin

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

NounlenderProgram
PillarData (facets: 8 data · 1 services)
Capabilities9 — 0 live · 9 sandbox · 0 declared
EntitiesLender
Doorsaggregator.vin
SDKVin.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:

Quote & price

fee

lenderProgram.fee · GET /lender-programs/fee · gate none · sandbox · answers LenderProgramFee@1

FieldTypeRequiredNotes
vinstringno

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

the SDK — lenderProgram.fee
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"})
GET /lender-programs/fee
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — lenderProgram.reserve
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"})
GET /lender-programs/reserve
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.

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

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.

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

EmitsLenderProgram.enrolled@1.

the SDK — lenderProgram.enroll
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"})
POST /lender-programs/enroll
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — lenderProgram.advance
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"})
GET /lender-programs/advance
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — lenderProgram.flat
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"})
GET /lender-programs/flat
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — lenderProgram.incentive
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"})
GET /lender-programs/incentive
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — lenderProgram.matrix
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"})
GET /lender-programs/matrix
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — lenderProgram.rateCard
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"})
GET /lender-programs/rate-card
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — lenderProgram.subvention
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"})
GET /lender-programs/subvention
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.

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