payoff
The payoff noun — identity, lifecycle, events, and every capability as an anchored section: 7 capabilities, 0 live, 7 sandbox, 0 declared.
payoff is one of the estate's 317 automotive nouns — a job a car needs done. It carries 7 capabilities: 0 live, 7 sandbox, 0 declared · doors financing.vin.
Identity
| Noun | payoff |
| Pillar | Commerce (facets: 2 data · 2 services · 3 commerce) |
| Capabilities | 7 — 0 live · 7 sandbox · 0 declared |
| Entities | Payoff |
| Doors | financing.vin |
| SDK | Vin.payoff.* from apis.vin |
| Address | /catalog/payoff#{action} — the anchor IS the wire name minus payoff. |
Events
The vocabulary this noun can append to the record — 10 past-tense, versioned event types, each linked to the capability that emits it:
Lien.releaseTriggered@1— emitted byconfirmPayoff.confirmed@1— emitted byconfirmPayoff.failed@1— emitted byoverage·remit·shortagePayoff.overageRefunded@1— emitted byoveragePayoff.remitted@1— emitted byremitPayoff.requested@1— emitted byrequestPayoff.shortageCollected@1— emitted byshortagePayoffQuote.expired@1— emitted byquotePayoffQuote.quoted@1— emitted byquotePayoffQuote.superseded@1— emitted byquote
Discover & read
verify
payoff.verify · GET /payoffs/verify · gate key · sandbox · answers PayoffVerify@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — financing.vin serves this noun on its two routes: / (the landing) · /JF2SLDRC2SH430512 (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 { payoff } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await payoff.verify({"vin":"JF2SLDRC2SH430512"})curl 'https://apis.vin/payoffs/verify?vin=JF2SLDRC2SH430512'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": "PayoffVerify@1",
"value": {
"verified": true,
"payoff": {
"ok": true,
"quote": {
"grossPayOffAmount": {
"currency": "USD",
"minorUnits": 1761815
},
"netPayOffAmount": {
"currency": "USD",
"minorUnits": 1718077
},
"goodThrough": "2026-08-20T00:00:00.000Z",
"perDiem": {
"currency": "USD",
"minorUnits": 237
},
"nextPaymentAmount": {
"currency": "USD",
"minorUnits": 35765
},
"nextPaymentDate": "2026-08-25T00:00:00.000Z",
"allowance": {
"currency": "USD",
"minorUnits": 43738
},
"freshQuote": true,
"lienholder": "Huntington National Bank",
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "payoff-rail-sandbox"
}
}
}
},
"evidence": {
"verified": true,
"payoff": {
"ok": true,
"quote": {
"grossPayOffAmount": {
"currency": "USD",
"minorUnits": 1761815
},
"netPayOffAmount": {
"currency": "USD",
"minorUnits": 1718077
},
"goodThrough": "2026-08-20T00:00:00.000Z",
"perDiem": {
"currency": "USD",
"minorUnits": 237
},
"nextPaymentAmount": {
"currency": "USD",
"minorUnits": 35765
},
"nextPaymentDate": "2026-08-25T00:00:00.000Z",
"allowance": {
"currency": "USD",
"minorUnits": 43738
},
"freshQuote": true,
"lienholder": "Huntington National Bank",
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "payoff-rail-sandbox"
}
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "payoff-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
payoff.quote · GET /payoffs/quote · gate offer · sandbox · answers PayoffQuote@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
lender | string | yes | lender id from payoff.lenders |
accountLast4 | string | no | — |
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: $49.00, posted.
Delegated calls require a typed Mandate — { ceiling, perAction, expires, tripwires }; the ceiling is a field, not a conversation.
Door — financing.vin serves this noun on its two routes: / (the landing) · /JF2SLDRC2SH430512 (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 — PayoffQuote.expired@1 · PayoffQuote.quoted@1 · PayoffQuote.superseded@1.
import { payoff } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await payoff.quote({"vin":"JF2SLDRC2SH430512","lender":"lender"})curl 'https://apis.vin/payoffs/quote?vin=JF2SLDRC2SH430512&lender=lender'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": "PayoffQuote@1",
"value": {
"vin": "JF2SLDRC2SH430512",
"lienholder": "Huntington National Bank",
"grossPayOffAmount": {
"currency": "USD",
"minorUnits": 1761815
},
"netPayOffAmount": {
"currency": "USD",
"minorUnits": 1718077
},
"perDiem": {
"currency": "USD",
"minorUnits": 237
},
"allowance": {
"currency": "USD",
"minorUnits": 43738
},
"goodThrough": "2026-08-20T00:00:00.000Z",
"nextPaymentAmount": {
"currency": "USD",
"minorUnits": 35765
},
"nextPaymentDate": "2026-08-25T00:00:00.000Z",
"freshQuote": true
},
"evidence": {
"vin": "JF2SLDRC2SH430512",
"lienholder": "Huntington National Bank",
"grossPayOffAmount": {
"currency": "USD",
"minorUnits": 1761815
},
"netPayOffAmount": {
"currency": "USD",
"minorUnits": 1718077
},
"perDiem": {
"currency": "USD",
"minorUnits": 237
},
"allowance": {
"currency": "USD",
"minorUnits": 43738
},
"goodThrough": "2026-08-20T00:00:00.000Z",
"nextPaymentAmount": {
"currency": "USD",
"minorUnits": 35765
},
"nextPaymentDate": "2026-08-25T00:00:00.000Z",
"freshQuote": true
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "payoff-rail-sandbox"
},
"events": [],
"meter": {
"charged": "49.00",
"posted": true
},
"connect": {
"type": "OFFER",
"kind": "connect",
"reason": "CONNECTION_ABSENT",
"portClass": "payoff-network",
"state": "absent",
"url": "https://integrates.vin/connect/payoff-network",
"message": "payoff.quote is live via connection — certified, connect to activate: complete the payoff-network link ceremony at https://integrates.vin/connect/payoff-network. The credential vault (auth.vin) holds the token, and the same call answers simulated:false — activation is the token, never a deploy."
}
}Apply & book
request
payoff.request · POST /payoffs/request · gate offer · sandbox · answers PayoffRequest@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 — financing.vin serves this noun on its two routes: / (the landing) · /JF2SLDRC2SH430512 (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 — Payoff.requested@1.
import { payoff } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await payoff.request({"vin":"JF2SLDRC2SH430512"})curl -X POST https://apis.vin/payoffs/request \
-H 'content-type: application/json' \
-d '{"vin":"JF2SLDRC2SH430512"}'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": "PayoffRequest@1",
"value": {
"vin": "JF2SLDRC2SH430512",
"lienholder": "Huntington National Bank",
"grossPayOffAmount": {
"currency": "USD",
"minorUnits": 1761815
},
"netPayOffAmount": {
"currency": "USD",
"minorUnits": 1718077
},
"perDiem": {
"currency": "USD",
"minorUnits": 237
},
"allowance": {
"currency": "USD",
"minorUnits": 43738
},
"goodThrough": "2026-08-20T00:00:00.000Z",
"nextPaymentAmount": {
"currency": "USD",
"minorUnits": 35765
},
"nextPaymentDate": "2026-08-25T00:00:00.000Z",
"freshQuote": true
},
"evidence": {
"vin": "JF2SLDRC2SH430512",
"lienholder": "Huntington National Bank",
"grossPayOffAmount": {
"currency": "USD",
"minorUnits": 1761815
},
"netPayOffAmount": {
"currency": "USD",
"minorUnits": 1718077
},
"perDiem": {
"currency": "USD",
"minorUnits": 237
},
"allowance": {
"currency": "USD",
"minorUnits": 43738
},
"goodThrough": "2026-08-20T00:00:00.000Z",
"nextPaymentAmount": {
"currency": "USD",
"minorUnits": 35765
},
"nextPaymentDate": "2026-08-25T00:00:00.000Z",
"freshQuote": true
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "payoff-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
remit
payoff.remit · POST /payoffs/remit · gate offer · sandbox · answers PayoffRemit@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 — financing.vin serves this noun on its two routes: / (the landing) · /JF2SLDRC2SH430512 (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 — Payoff.failed@1 · Payoff.remitted@1.
import { payoff } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await payoff.remit({"vin":"JF2SLDRC2SH430512"})curl -X POST https://apis.vin/payoffs/remit \
-H 'content-type: application/json' \
-d '{"vin":"JF2SLDRC2SH430512"}'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": "PayoffRemit@1",
"value": {
"payout": {
"$type": "Payout",
"$id": "payout_po_1",
"payeeRef": "payee-sandbox",
"amount": {
"amount": "1800000",
"currency": "USD"
},
"scheme": "wire",
"destinationRef": "dest_lienholder_sandbox",
"status": "paid",
"createdAt": "2026-08-10T00:00:00.000Z",
"ledgerRef": "ledgerentry_po_1",
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "settlement-rail"
},
"providerData": {
"externalId": "po_1"
}
}
},
"evidence": {
"payout": {
"$type": "Payout",
"$id": "payout_po_1",
"payeeRef": "payee-sandbox",
"amount": {
"amount": "1800000",
"currency": "USD"
},
"scheme": "wire",
"destinationRef": "dest_lienholder_sandbox",
"status": "paid",
"createdAt": "2026-08-10T00:00:00.000Z",
"ledgerRef": "ledgerentry_po_1",
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "settlement-rail"
},
"providerData": {
"externalId": "po_1"
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "payoff-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
confirm
payoff.confirm · POST /payoffs/confirm · gate offer · sandbox · answers PayoffConfirm@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 — financing.vin serves this noun on its two routes: / (the landing) · /JF2SLDRC2SH430512 (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 — Lien.releaseTriggered@1 · Payoff.confirmed@1.
import { payoff } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await payoff.confirm({"vin":"JF2SLDRC2SH430512"})curl -X POST https://apis.vin/payoffs/confirm \
-H 'content-type: application/json' \
-d '{"vin":"JF2SLDRC2SH430512"}'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": "PayoffConfirm@1",
"value": {
"confirmed": true,
"payoff": {
"ok": true,
"quote": {
"grossPayOffAmount": {
"currency": "USD",
"minorUnits": 1761815
},
"netPayOffAmount": {
"currency": "USD",
"minorUnits": 1718077
},
"goodThrough": "2026-08-20T00:00:00.000Z",
"perDiem": {
"currency": "USD",
"minorUnits": 237
},
"nextPaymentAmount": {
"currency": "USD",
"minorUnits": 35765
},
"nextPaymentDate": "2026-08-25T00:00:00.000Z",
"allowance": {
"currency": "USD",
"minorUnits": 43738
},
"freshQuote": true,
"lienholder": "Huntington National Bank",
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "payoff-rail-sandbox"
}
}
}
},
"evidence": {
"confirmed": true,
"payoff": {
"ok": true,
"quote": {
"grossPayOffAmount": {
"currency": "USD",
"minorUnits": 1761815
},
"netPayOffAmount": {
"currency": "USD",
"minorUnits": 1718077
},
"goodThrough": "2026-08-20T00:00:00.000Z",
"perDiem": {
"currency": "USD",
"minorUnits": 237
},
"nextPaymentAmount": {
"currency": "USD",
"minorUnits": 35765
},
"nextPaymentDate": "2026-08-25T00:00:00.000Z",
"allowance": {
"currency": "USD",
"minorUnits": 43738
},
"freshQuote": true,
"lienholder": "Huntington National Bank",
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "payoff-rail-sandbox"
}
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "payoff-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
overage
payoff.overage · POST /payoffs/overage · gate offer · sandbox · answers PayoffOverage@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 — financing.vin serves this noun on its two routes: / (the landing) · /JF2SLDRC2SH430512 (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 — Payoff.failed@1 · Payoff.overageRefunded@1.
import { payoff } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await payoff.overage({"vin":"JF2SLDRC2SH430512"})curl -X POST https://apis.vin/payoffs/overage \
-H 'content-type: application/json' \
-d '{"vin":"JF2SLDRC2SH430512"}'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": "PayoffOverage@1",
"value": {
"id": "payoff_df2e998a",
"vin": "vin-a253c4b0",
"lenderId": "lender_12485c74",
"accountLast4": "accountLast4-883a12c6",
"gross": {
"amount": "1549.86",
"currency": "USD"
},
"net": {
"amount": "1549.86",
"currency": "USD"
},
"perDiem": {
"amount": "1549.86",
"currency": "USD"
},
"goodThrough": "2027-01-28"
},
"evidence": {
"id": "payoff_df2e998a",
"vin": "vin-a253c4b0",
"lenderId": "lender_12485c74",
"accountLast4": "accountLast4-883a12c6",
"gross": {
"amount": "1549.86",
"currency": "USD"
},
"net": {
"amount": "1549.86",
"currency": "USD"
},
"perDiem": {
"amount": "1549.86",
"currency": "USD"
},
"goodThrough": "2027-01-28"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "payoff-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}shortage
payoff.shortage · POST /payoffs/shortage · gate offer · sandbox · answers PayoffShortage@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 — financing.vin serves this noun on its two routes: / (the landing) · /JF2SLDRC2SH430512 (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 — Payoff.failed@1 · Payoff.shortageCollected@1.
import { payoff } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await payoff.shortage({"vin":"JF2SLDRC2SH430512"})curl -X POST https://apis.vin/payoffs/shortage \
-H 'content-type: application/json' \
-d '{"vin":"JF2SLDRC2SH430512"}'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": "PayoffShortage@1",
"value": {
"id": "payoff_7d75c404",
"vin": "vin-addbbc1e",
"lenderId": "lender_2b5a2fce",
"accountLast4": "accountLast4-38c7f47c",
"gross": {
"amount": "3502.90",
"currency": "USD"
},
"net": {
"amount": "3502.90",
"currency": "USD"
},
"perDiem": {
"amount": "3502.90",
"currency": "USD"
},
"goodThrough": "2027-05-22"
},
"evidence": {
"id": "payoff_7d75c404",
"vin": "vin-addbbc1e",
"lenderId": "lender_2b5a2fce",
"accountLast4": "accountLast4-38c7f47c",
"gross": {
"amount": "3502.90",
"currency": "USD"
},
"net": {
"amount": "3502.90",
"currency": "USD"
},
"perDiem": {
"amount": "3502.90",
"currency": "USD"
},
"goodThrough": "2027-05-22"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "payoff-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.
Payoff
Schema
| Property | Type | Notes |
|---|---|---|
id | id | poq_ |
vin | string | — |
lenderId | ref→Lender | — |
accountLast4 | string | — |
gross | money | — |
net | money | — |
perDiem | money | — |
goodThrough | date | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
offer | payoff | 1:0..1 | nets against |
payoff | lender | *:1 | quoted-by |
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.
Payoff · Class model
Payoff · State machine
Payoff · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.