loanServicing
The loanServicing noun — identity, lifecycle, events, and every capability as an anchored section: 12 capabilities, 0 live, 12 sandbox, 0 declared.
loanServicing is one of the estate's 317 automotive nouns — a job a car needs done. It carries 12 capabilities: 0 live, 12 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | loanServicing |
| Pillar | Services (facets: 8 services · 4 commerce) |
| Capabilities | 12 — 0 live · 12 sandbox · 0 declared |
| Entities | LoanServicing |
| Doors | aggregator.vin |
| SDK | Vin.loanServicing.* from apis.vin |
| Address | /catalog/loanServicing#{action} — the anchor IS the wire name minus loanServicing. |
Lifecycle
LoanServicing — LoanServicingFSM: 8 states, 9 transitions — Boarded · Billed · Current · Delinquent · Deferred · InRecovery · Transferred · PaidOff. Each transition is a past-tense event on the record.
Events
The vocabulary this noun can append to the record — 15 past-tense, versioned event types, each linked to the capability that emits it:
LoanServicing.billed@1— emitted bybillLoanServicing.collected@1— emitted bycollectLoanServicing.delinquencyRun@1— emitted bydelinquencyLoanServicing.escrowManaged@1— emitted byescrowManageLoanServicing.failed@1— emitted byapplyPayment·bill·collectLoanServicing.impounded@1— emitted byimpoundLoanServicing.loanBoarded@1— emitted byboardLoanLoanServicing.paidOff@1— emitted byapplyPaymentLoanServicing.paymentApplied@1— emitted byapplyPaymentLoanServicing.paymentDeferred@1— emitted bypaymentDeferralLoanServicing.payoffLetterIssued@1— emitted bypayoffLetterLoanServicing.recoveryAssigned@1— emitted byrecoveryAssignLoanServicing.reported@1— emitted byreportLoanServicing.transferred@1— emitted bytransferRepossession.cured@1— emitted bycollect
Discover & read
report
loanServicing.report · POST /loan-servicings/report · gate offer · sandbox · answers LoanServicingReport@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) · /5YJSA1E58MF429328 (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 — LoanServicing.reported@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.report({"vin":"5YJSA1E58MF429328"})curl -X POST https://apis.vin/loan-servicings/report \
-H 'content-type: application/json' \
-d '{"vin":"5YJSA1E58MF429328"}'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": "LoanServicingReport@1",
"value": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"reporting": {
"status": "reported",
"loanId": "LN-d87b2e17",
"servicingId": "SVC-2b3afd65",
"position": "Current"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"reporting": {
"status": "reported",
"loanId": "LN-d87b2e17",
"servicingId": "SVC-2b3afd65",
"position": "Current"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
recoveryAssign
loanServicing.recoveryAssign · POST /loan-servicings/recovery-assign · gate key · sandbox · answers LoanServicingRecoveryAssign@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /5YJSA1E58MF429328 (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 — LoanServicing.recoveryAssigned@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.recoveryAssign()curl -X POST https://apis.vin/loan-servicings/recovery-assign \
-H 'content-type: application/json' \
-d '{}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "LoanServicingRecoveryAssign@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "loanServicing",
"asOf": "2026-08-10",
"recovery": {
"status": "no-open-loan"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "loanServicing",
"asOf": "2026-08-10",
"recovery": {
"status": "no-open-loan"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
collect
loanServicing.collect · POST /loan-servicings/collect · gate offer · sandbox · answers LoanServicingCollect@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) · /5YJSA1E58MF429328 (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 — LoanServicing.collected@1 · LoanServicing.failed@1 · Repossession.cured@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.collect({"vin":"5YJSA1E58MF429328"})curl -X POST https://apis.vin/loan-servicings/collect \
-H 'content-type: application/json' \
-d '{"vin":"5YJSA1E58MF429328"}'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": "LoanServicingCollect@1",
"value": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"collection": {
"status": "collected",
"id": "COL-3178bda3",
"loanId": "LN-d87b2e17",
"position": "Current",
"amountCents": 34885,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"collection": {
"status": "collected",
"id": "COL-3178bda3",
"loanId": "LN-d87b2e17",
"position": "Current",
"amountCents": 34885,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-desk-sandbox"
},
"events": [
"Repossession.cured@1"
],
"meter": {
"charged": "0.00",
"posted": false
}
}bill
loanServicing.bill · POST /loan-servicings/bill · gate offer · sandbox · answers LoanServicingBill@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) · /5YJSA1E58MF429328 (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 — LoanServicing.billed@1 · LoanServicing.failed@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.bill({"vin":"5YJSA1E58MF429328"})curl -X POST https://apis.vin/loan-servicings/bill \
-H 'content-type: application/json' \
-d '{"vin":"5YJSA1E58MF429328"}'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": "LoanServicingBill@1",
"value": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"billing": {
"id": "BILL-0d4fbf76",
"loanId": "LN-d87b2e17",
"servicingId": "SVC-2b3afd65",
"position": "Current",
"amountCents": 34885,
"currency": "USD",
"dueBy": "2026-09-09",
"status": "billed"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"billing": {
"id": "BILL-0d4fbf76",
"loanId": "LN-d87b2e17",
"servicingId": "SVC-2b3afd65",
"position": "Current",
"amountCents": 34885,
"currency": "USD",
"dueBy": "2026-09-09",
"status": "billed"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Lifecycle & state
transfer
loanServicing.transfer · POST /loan-servicings/transfer · gate offer · sandbox · answers LoanServicingTransfer@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) · /5YJSA1E58MF429328 (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 — LoanServicing.transferred@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.transfer({"vin":"5YJSA1E58MF429328"})curl -X POST https://apis.vin/loan-servicings/transfer \
-H 'content-type: application/json' \
-d '{"vin":"5YJSA1E58MF429328"}'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": "LoanServicingTransfer@1",
"value": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"transfer": {
"status": "transfer-filed",
"id": "TRF-876ad0c0",
"loanId": "LN-d87b2e17",
"servicingId": "SVC-2b3afd65",
"position": "Current",
"successor": {
"fsId": "F00SET",
"name": "Southeast Toyota Finance"
},
"effectiveBy": "2026-08-25"
}
},
"evidence": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"transfer": {
"status": "transfer-filed",
"id": "TRF-876ad0c0",
"loanId": "LN-d87b2e17",
"servicingId": "SVC-2b3afd65",
"position": "Current",
"successor": {
"fsId": "F00SET",
"name": "Southeast Toyota Finance"
},
"effectiveBy": "2026-08-25"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
applyPayment
loanServicing.applyPayment · POST /loan-servicings/apply-payment · gate offer · sandbox · answers LoanServicingApplyPayment@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) · /5YJSA1E58MF429328 (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 — LoanServicing.failed@1 · LoanServicing.paidOff@1 · LoanServicing.paymentApplied@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.applyPayment({"vin":"5YJSA1E58MF429328"})curl -X POST https://apis.vin/loan-servicings/apply-payment \
-H 'content-type: application/json' \
-d '{"vin":"5YJSA1E58MF429328"}'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": "LoanServicingApplyPayment@1",
"value": {
"id": "svc_836541b4",
"loanId": "loan_cb592425",
"servicerId": "party_cebc4027",
"amountApplied": {
"amount": "585.00",
"currency": "USD"
},
"principalBalance": {
"amount": "14094.54",
"currency": "USD"
},
"nextDueDate": "2026-01-31",
"status": "Current"
},
"evidence": {
"id": "svc_836541b4",
"loanId": "loan_cb592425",
"servicerId": "party_cebc4027",
"amountApplied": {
"amount": "585.00",
"currency": "USD"
},
"principalBalance": {
"amount": "14094.54",
"currency": "USD"
},
"nextDueDate": "2026-01-31",
"status": "Current"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "loan-servicing-sandbox"
},
"events": [
"LoanServicing.paymentApplied@1"
],
"meter": {
"charged": "0.00",
"posted": false
}
}boardLoan
loanServicing.boardLoan · POST /loan-servicings/board-loan · gate offer · sandbox · answers LoanServicingBoardLoan@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) · /5YJSA1E58MF429328 (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 — LoanServicing.loanBoarded@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.boardLoan({"vin":"5YJSA1E58MF429328"})curl -X POST https://apis.vin/loan-servicings/board-loan \
-H 'content-type: application/json' \
-d '{"vin":"5YJSA1E58MF429328"}'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": "LoanServicingBoardLoan@1",
"value": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"boarding": {
"status": "already-boarded",
"servicingId": "SVC-2b3afd65",
"loanId": "LN-d87b2e17",
"position": "Current"
}
},
"evidence": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"boarding": {
"status": "already-boarded",
"servicingId": "SVC-2b3afd65",
"loanId": "LN-d87b2e17",
"position": "Current"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}delinquency
loanServicing.delinquency · POST /loan-servicings/delinquency · gate offer · sandbox · answers LoanServicingDelinquency@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) · /5YJSA1E58MF429328 (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 — LoanServicing.delinquencyRun@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.delinquency({"vin":"5YJSA1E58MF429328"})curl -X POST https://apis.vin/loan-servicings/delinquency \
-H 'content-type: application/json' \
-d '{"vin":"5YJSA1E58MF429328"}'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": "LoanServicingDelinquency@1",
"value": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"delinquency": {
"status": "run",
"delinquent": false,
"loanId": "LN-d87b2e17",
"servicingId": "SVC-2b3afd65",
"position": "Current"
}
},
"evidence": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"delinquency": {
"status": "run",
"delinquent": false,
"loanId": "LN-d87b2e17",
"servicingId": "SVC-2b3afd65",
"position": "Current"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}escrowManage
loanServicing.escrowManage · POST /loan-servicings/escrow-manage · gate offer · sandbox · answers LoanServicingEscrowManage@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) · /5YJSA1E58MF429328 (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 — LoanServicing.escrowManaged@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.escrowManage({"vin":"5YJSA1E58MF429328"})curl -X POST https://apis.vin/loan-servicings/escrow-manage \
-H 'content-type: application/json' \
-d '{"vin":"5YJSA1E58MF429328"}'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": "LoanServicingEscrowManage@1",
"value": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"escrow": {
"status": "active",
"id": "ESC-211bc5ac",
"loanId": "LN-d87b2e17",
"position": "Current"
}
},
"evidence": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"escrow": {
"status": "active",
"id": "ESC-211bc5ac",
"loanId": "LN-d87b2e17",
"position": "Current"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}impound
loanServicing.impound · POST /loan-servicings/impound · gate offer · sandbox · answers LoanServicingImpound@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) · /5YJSA1E58MF429328 (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 — LoanServicing.impounded@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.impound({"vin":"5YJSA1E58MF429328"})curl -X POST https://apis.vin/loan-servicings/impound \
-H 'content-type: application/json' \
-d '{"vin":"5YJSA1E58MF429328"}'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": "LoanServicingImpound@1",
"value": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"escrow": {
"status": "active",
"id": "ESC-211bc5ac",
"loanId": "LN-d87b2e17",
"position": "Current"
}
},
"evidence": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"escrow": {
"status": "active",
"id": "ESC-211bc5ac",
"loanId": "LN-d87b2e17",
"position": "Current"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}paymentDeferral
loanServicing.paymentDeferral · POST /loan-servicings/payment-deferral · gate key · sandbox · answers LoanServicingPaymentDeferral@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /5YJSA1E58MF429328 (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 — LoanServicing.paymentDeferred@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.paymentDeferral()curl -X POST https://apis.vin/loan-servicings/payment-deferral \
-H 'content-type: application/json' \
-d '{}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "LoanServicingPaymentDeferral@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "loanServicing",
"asOf": "2026-08-10",
"deferral": {
"status": "no-open-loan"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "loanServicing",
"asOf": "2026-08-10",
"deferral": {
"status": "no-open-loan"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}payoffLetter
loanServicing.payoffLetter · POST /loan-servicings/payoff-letter · gate offer · sandbox · answers LoanServicingPayoffLetter@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) · /5YJSA1E58MF429328 (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 — LoanServicing.payoffLetterIssued@1.
import { loanServicing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.payoffLetter({"vin":"5YJSA1E58MF429328"})curl -X POST https://apis.vin/loan-servicings/payoff-letter \
-H 'content-type: application/json' \
-d '{"vin":"5YJSA1E58MF429328"}'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": "LoanServicingPayoffLetter@1",
"value": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"letter": {
"status": "issued",
"id": "LTR-6cd8b3e8",
"loanId": "LN-d87b2e17",
"position": "Current",
"vin": "5YJSA1E58MF429328",
"lienholder": "Huntington National Bank",
"grossPayOffAmount": {
"currency": "USD",
"minorUnits": 2197703
},
"netPayOffAmount": {
"currency": "USD",
"minorUnits": 2172357
},
"perDiem": {
"currency": "USD",
"minorUnits": 295
},
"allowance": {
"currency": "USD",
"minorUnits": 25346
},
"goodThrough": "2026-08-20T00:00:00.000Z",
"nextPaymentAmount": {
"currency": "USD",
"minorUnits": 49888
},
"nextPaymentDate": "2026-08-25T00:00:00.000Z",
"freshQuote": true,
"reference": "poq_c4cd24a3"
}
},
"evidence": {
"vin": "5YJSA1E58MF429328",
"noun": "loanServicing",
"asOf": "2026-08-10",
"letter": {
"status": "issued",
"id": "LTR-6cd8b3e8",
"loanId": "LN-d87b2e17",
"position": "Current",
"vin": "5YJSA1E58MF429328",
"lienholder": "Huntington National Bank",
"grossPayOffAmount": {
"currency": "USD",
"minorUnits": 2197703
},
"netPayOffAmount": {
"currency": "USD",
"minorUnits": 2172357
},
"perDiem": {
"currency": "USD",
"minorUnits": 295
},
"allowance": {
"currency": "USD",
"minorUnits": 25346
},
"goodThrough": "2026-08-20T00:00:00.000Z",
"nextPaymentAmount": {
"currency": "USD",
"minorUnits": 49888
},
"nextPaymentDate": "2026-08-25T00:00:00.000Z",
"freshQuote": true,
"reference": "poq_c4cd24a3"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "note-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.
LoanServicing
Schema
| Property | Type | Notes |
|---|---|---|
id | id | svc_ |
loanId | ref→Loan | — |
servicerId | ref→Party | — |
principalBalance | money | — |
nextDueDate | date | — |
status | LoanServicingFSM | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
loanServicing | loan | 1:1 | services |
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 2 diagrams, rendered from the estate model.
LoanServicing · Class model
LoanServicing · State machine
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.