docs.vin

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

NounloanServicing
PillarServices (facets: 8 services · 4 commerce)
Capabilities12 — 0 live · 12 sandbox · 0 declared
EntitiesLoanServicing
Doorsaggregator.vin
SDKVin.loanServicing.* from apis.vin
Address/catalog/loanServicing#{action} — the anchor IS the wire name minus loanServicing.

Lifecycle

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

Discover & read

report

loanServicing.report · POST /loan-servicings/report · gate offer · sandbox · answers LoanServicingReport@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) · /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.

EmitsLoanServicing.reported@1.

the SDK — loanServicing.report
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"})
POST /loan-servicings/report
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.

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

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

EmitsLoanServicing.recoveryAssigned@1.

the SDK — loanServicing.recoveryAssign
import { loanServicing } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.recoveryAssign()
POST /loan-servicings/recovery-assign
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.

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

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) · /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.

EmitsLoanServicing.collected@1 · LoanServicing.failed@1 · Repossession.cured@1.

the SDK — loanServicing.collect
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"})
POST /loan-servicings/collect
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.

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

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) · /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.

EmitsLoanServicing.billed@1 · LoanServicing.failed@1.

the SDK — loanServicing.bill
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"})
POST /loan-servicings/bill
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.

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

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) · /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.

EmitsLoanServicing.transferred@1.

the SDK — loanServicing.transfer
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"})
POST /loan-servicings/transfer
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.

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

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) · /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.

EmitsLoanServicing.failed@1 · LoanServicing.paidOff@1 · LoanServicing.paymentApplied@1.

the SDK — loanServicing.applyPayment
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"})
POST /loan-servicings/apply-payment
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.

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

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) · /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.

EmitsLoanServicing.loanBoarded@1.

the SDK — loanServicing.boardLoan
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"})
POST /loan-servicings/board-loan
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.

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

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) · /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.

EmitsLoanServicing.delinquencyRun@1.

the SDK — loanServicing.delinquency
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"})
POST /loan-servicings/delinquency
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.

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

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) · /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.

EmitsLoanServicing.escrowManaged@1.

the SDK — loanServicing.escrowManage
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"})
POST /loan-servicings/escrow-manage
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.

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

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) · /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.

EmitsLoanServicing.impounded@1.

the SDK — loanServicing.impound
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"})
POST /loan-servicings/impound
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.

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

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

EmitsLoanServicing.paymentDeferred@1.

the SDK — loanServicing.paymentDeferral
import { loanServicing } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await loanServicing.paymentDeferral()
POST /loan-servicings/payment-deferral
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.

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

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) · /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.

EmitsLoanServicing.payoffLetterIssued@1.

the SDK — loanServicing.payoffLetter
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"})
POST /loan-servicings/payoff-letter
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.

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

PropertyTypeNotes
ididsvc_
loanIdref→Loan
servicerIdref→Party
principalBalancemoney
nextDueDatedate
statusLoanServicingFSM

Relationships

FromToCardinalityAs
loanServicingloan1:1services

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.