creditApplication
The creditApplication noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 0 live, 14 sandbox, 0 declared.
creditApplication is one of the estate's 317 automotive nouns — a job a car needs done. It carries 14 capabilities: 0 live, 14 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | creditApplication |
| Pillar | Services (facets: 2 data · 12 services) |
| Capabilities | 14 — 0 live · 14 sandbox · 0 declared |
| Entities | CreditApplication |
| Doors | aggregator.vin |
| SDK | Vin.creditApplication.* from apis.vin |
| Address | /catalog/creditApplication#{action} — the anchor IS the wire name minus creditApplication. |
Lifecycle
CreditApplication — CreditFSM: 7 states, 7 transitions — Prequal · Applied · Pending · ConditionallyApproved · Approved · Declined · Booked. 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:
CreditApplication.approved@1— emitted bydecisionCreditApplication.booked@1— emitted bydecisionCreditApplication.built@1— emitted bybuildCreditApplication.coApplicantAdded@1— emitted bycoApplicantCreditApplication.countered@1— emitted bycounterofferCreditApplication.employmentVerified@1— emitted byemploymentCreditApplication.incomeVerified@1— emitted byincomeCreditApplication.multiLenderRouted@1— emitted bymultiLenderRouteCreditApplication.repriced@1— emitted byrepriceCreditApplication.requested@1— emitted bysubmitCreditApplication.residenceVerified@1— emitted byresidenceCreditApplication.stipsCleared@1— emitted bystipsCreditApplication.submitted@1— emitted bysubmitCreditApplication.validated@1— emitted byvalidateCreditApplication.withdrawn@1— emitted bywithdraw
Discover & read
status
creditApplication.status · GET /credit-applications/status · gate none · sandbox · answers CreditApplicationStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6RR7JT1HS816785 (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 { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.status({"vin":"1C6RR7JT1HS816785"})curl 'https://apis.vin/credit-applications/status?vin=1C6RR7JT1HS816785'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": "CreditApplicationStatus@1",
"value": {
"deal": "deal-1C6RR7JT1HS816785",
"state": "pending",
"routedTo": "F000WL",
"lastEvent": "application.routed"
},
"evidence": {
"deal": "deal-1C6RR7JT1HS816785",
"state": "pending",
"routedTo": "F000WL",
"lastEvent": "application.routed"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "credit-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}validate
creditApplication.validate · POST /credit-applications/validate · gate offer · sandbox · answers CreditApplicationValidate@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.validated@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.validate({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/validate \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationValidate@1",
"value": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"validation": {
"status": "valid",
"participant": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active"
}
}
},
"evidence": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"validation": {
"status": "valid",
"participant": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active"
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-file-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
reprice
creditApplication.reprice · POST /credit-applications/reprice · gate offer · sandbox · answers CreditApplicationReprice@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.repriced@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.reprice({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/reprice \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationReprice@1",
"value": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"reprice": {
"status": "no-decision-to-reprice",
"position": "Prequal"
}
},
"evidence": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"reprice": {
"status": "no-decision-to-reprice",
"position": "Prequal"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-file-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}counteroffer
creditApplication.counteroffer · POST /credit-applications/counteroffer · gate offer · sandbox · answers CreditApplicationCounteroffer@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.countered@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.counteroffer({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/counteroffer \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationCounteroffer@1",
"value": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"counteroffer": {
"status": "none-outstanding",
"position": "Prequal"
}
},
"evidence": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"counteroffer": {
"status": "none-outstanding",
"position": "Prequal"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-file-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
submit
creditApplication.submit · POST /credit-applications/submit · gate offer · sandbox · answers CreditApplicationSubmit@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.requested@1 · CreditApplication.submitted@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.submit({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/submit \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationSubmit@1",
"value": {
"submission": {
"conversationId": "CONV-1",
"dealJacketId": "DJ-1",
"status": "pending",
"signed": {
"method": "POST",
"path": "/credit-applications/DJ-1",
"headers": {
"authorization": "Sig sandbox-key:Ha5Y65I3r5ImMFqOL+ZNTzfw+K0ZcB+7ELc3mEtV0mQ=",
"date": "Mon, 10 Aug 2026 00:00:00 GMT",
"content-type": "application/json",
"x-partner-id": "sandbox-partner",
"x-act-as-dealer": "SANDBOX-DEALER"
},
"canonical": "POST\nc515bafeed90338f3ca82aab14843b43f8aaacbbf58a92c72f7252563ab253f1\napplication/json\nMon, 10 Aug 2026 00:00:00 GMT\nx-partner-id:sandbox-partner\nx-act-as-dealer:SANDBOX-DEALER\nx-act-as-user:\n"
},
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "credit-rail-sandbox"
}
}
},
"evidence": {
"submission": {
"conversationId": "CONV-1",
"dealJacketId": "DJ-1",
"status": "pending",
"signed": {
"method": "POST",
"path": "/credit-applications/DJ-1",
"headers": {
"authorization": "Sig sandbox-key:Ha5Y65I3r5ImMFqOL+ZNTzfw+K0ZcB+7ELc3mEtV0mQ=",
"date": "Mon, 10 Aug 2026 00:00:00 GMT",
"content-type": "application/json",
"x-partner-id": "sandbox-partner",
"x-act-as-dealer": "SANDBOX-DEALER"
},
"canonical": "POST\nc515bafeed90338f3ca82aab14843b43f8aaacbbf58a92c72f7252563ab253f1\napplication/json\nMon, 10 Aug 2026 00:00:00 GMT\nx-partner-id:sandbox-partner\nx-act-as-dealer:SANDBOX-DEALER\nx-act-as-user:\n"
},
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "credit-rail-sandbox"
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "credit-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
build
creditApplication.build · POST /credit-applications/build · gate offer · sandbox · answers CreditApplicationBuild@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.built@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.build({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/build \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationBuild@1",
"value": {
"hostedApplication": {
"formToken": "hf_0447f6a7",
"url": "https://credit-rail-sandbox.local/apply/hf_0447f6a7",
"expiresAt": "2026-08-13T00:00:00.000Z",
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "credit-rail-sandbox"
}
}
},
"evidence": {
"hostedApplication": {
"formToken": "hf_0447f6a7",
"url": "https://credit-rail-sandbox.local/apply/hf_0447f6a7",
"expiresAt": "2026-08-13T00:00:00.000Z",
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "credit-rail-sandbox"
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "credit-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
coApplicant
creditApplication.coApplicant · POST /credit-applications/co-applicant · gate offer · sandbox · answers CreditApplicationCoApplicant@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.coApplicantAdded@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.coApplicant({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/co-applicant \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationCoApplicant@1",
"value": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"coApplicant": {
"status": "none-on-file"
}
},
"evidence": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"coApplicant": {
"status": "none-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-file-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}decision
creditApplication.decision · GET /credit-applications/decision · gate key · sandbox · answers CreditApplicationDecision@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6RR7JT1HS816785 (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 — CreditApplication.approved@1 · CreditApplication.booked@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.decision({"vin":"1C6RR7JT1HS816785"})curl 'https://apis.vin/credit-applications/decision?vin=1C6RR7JT1HS816785'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": "CreditApplicationDecision@1",
"value": {
"decision": {
"conversationId": "CONV-1",
"dealJacketId": "DJ-1",
"status": "pending",
"offers": [],
"history": [],
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "credit-rail-sandbox"
}
}
},
"evidence": {
"decision": {
"conversationId": "CONV-1",
"dealJacketId": "DJ-1",
"status": "pending",
"offers": [],
"history": [],
"provenance": {
"environment": "sandbox",
"simulated": true,
"provider": "credit-rail-sandbox"
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "credit-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}employment
creditApplication.employment · POST /credit-applications/employment · gate offer · sandbox · answers CreditApplicationEmployment@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.employmentVerified@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.employment({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/employment \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationEmployment@1",
"value": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"verification": {
"kind": "employment",
"status": "verified",
"participant": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active"
}
}
},
"evidence": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"verification": {
"kind": "employment",
"status": "verified",
"participant": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active"
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-file-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}income
creditApplication.income · POST /credit-applications/income · gate offer · sandbox · answers CreditApplicationIncome@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.incomeVerified@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.income({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/income \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationIncome@1",
"value": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"verification": {
"kind": "income",
"status": "verified",
"participant": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active"
}
}
},
"evidence": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"verification": {
"kind": "income",
"status": "verified",
"participant": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active"
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-file-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}multiLenderRoute
creditApplication.multiLenderRoute · POST /credit-applications/multi-lender-route · gate key · sandbox · answers CreditApplicationMultiLenderRoute@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6RR7JT1HS816785 (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 — CreditApplication.multiLenderRouted@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.multiLenderRoute()curl -X POST https://apis.vin/credit-applications/multi-lender-route \
-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": "CreditApplicationMultiLenderRoute@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "creditApplication",
"asOf": "2026-08-10",
"application": {
"status": "no-application-on-file"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "creditApplication",
"asOf": "2026-08-10",
"application": {
"status": "no-application-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-file-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}residence
creditApplication.residence · POST /credit-applications/residence · gate offer · sandbox · answers CreditApplicationResidence@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.residenceVerified@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.residence({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/residence \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationResidence@1",
"value": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"verification": {
"kind": "residence",
"status": "verified",
"participant": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active"
}
}
},
"evidence": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"verification": {
"kind": "residence",
"status": "verified",
"participant": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active"
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-file-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}stips
creditApplication.stips · POST /credit-applications/stips · gate offer · sandbox · answers CreditApplicationStips@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.stipsCleared@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.stips({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/stips \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationStips@1",
"value": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"stipFile": {
"status": "no-stip-on-file",
"items": []
}
},
"evidence": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"stipFile": {
"status": "no-stip-on-file",
"items": []
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-file-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}withdraw
creditApplication.withdraw · POST /credit-applications/withdraw · gate offer · sandbox · answers CreditApplicationWithdraw@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) · /1C6RR7JT1HS816785 (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 — CreditApplication.withdrawn@1.
import { creditApplication } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.withdraw({"vin":"1C6RR7JT1HS816785"})curl -X POST https://apis.vin/credit-applications/withdraw \
-H 'content-type: application/json' \
-d '{"vin":"1C6RR7JT1HS816785"}'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": "CreditApplicationWithdraw@1",
"value": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"withdrawal": {
"status": "withdrawal-requested",
"position": "Prequal"
}
},
"evidence": {
"vin": "1C6RR7JT1HS816785",
"noun": "creditApplication",
"asOf": "2026-08-10",
"id": "app_bd5024fe",
"applicantId": "ID-11f17424",
"coApplicants": [],
"lenderId": "F00SET",
"decision": {
"status": "pending"
},
"stips": [],
"adverseAction": {
"status": "none"
},
"status": "Prequal",
"withdrawal": {
"status": "withdrawal-requested",
"position": "Prequal"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-file-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.
CreditApplication
Schema
| Property | Type | Notes |
|---|---|---|
id | id | app_ |
applicantId | ref→Party | — |
coApplicants | ref→Party[] | — |
lenderId | ref→Lender | — |
decision | CreditDecision | — |
stips | ref→Stip[] | — |
adverseAction | AdverseAction | — |
status | CreditFSM | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
deal | creditApplication | 1:0..1 | financed |
creditApplication | lender | *:1 | routed to |
creditApplication | preApproval | 1:0..1 | promoted from |
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.
CreditApplication · Class model
CreditApplication · State machine
CreditApplication · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
courtesyTransport
The courtesyTransport noun — identity, lifecycle, events, and every capability as an anchored section: 12 capabilities, 0 live, 12 sandbox, 0 declared.
crmEvent
The crmEvent noun — identity, lifecycle, events, and every capability as an anchored section: 9 capabilities, 0 live, 9 sandbox, 0 declared.