docs.vin

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

NouncreditApplication
PillarServices (facets: 2 data · 12 services)
Capabilities14 — 0 live · 14 sandbox · 0 declared
EntitiesCreditApplication
Doorsaggregator.vin
SDKVin.creditApplication.* from apis.vin
Address/catalog/creditApplication#{action} — the anchor IS the wire name minus creditApplication.

Lifecycle

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

Discover & read

status

creditApplication.status · GET /credit-applications/status · gate none · sandbox · answers CreditApplicationStatus@1

FieldTypeRequiredNotes
vinstringno

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

the SDK — creditApplication.status
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"})
GET /credit-applications/status
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.

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

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

EmitsCreditApplication.validated@1.

the SDK — creditApplication.validate
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"})
POST /credit-applications/validate
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.

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

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

EmitsCreditApplication.repriced@1.

the SDK — creditApplication.reprice
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"})
POST /credit-applications/reprice
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.

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

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

EmitsCreditApplication.countered@1.

the SDK — creditApplication.counteroffer
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"})
POST /credit-applications/counteroffer
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.

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

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

EmitsCreditApplication.requested@1 · CreditApplication.submitted@1.

the SDK — creditApplication.submit
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"})
POST /credit-applications/submit
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.

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

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

EmitsCreditApplication.built@1.

the SDK — creditApplication.build
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"})
POST /credit-applications/build
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.

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

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

EmitsCreditApplication.coApplicantAdded@1.

the SDK — creditApplication.coApplicant
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"})
POST /credit-applications/co-applicant
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.

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

FieldTypeRequiredNotes
vinstringno

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

EmitsCreditApplication.approved@1 · CreditApplication.booked@1.

the SDK — creditApplication.decision
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"})
GET /credit-applications/decision
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.

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

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

EmitsCreditApplication.employmentVerified@1.

the SDK — creditApplication.employment
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"})
POST /credit-applications/employment
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.

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

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

EmitsCreditApplication.incomeVerified@1.

the SDK — creditApplication.income
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"})
POST /credit-applications/income
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.

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

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

EmitsCreditApplication.multiLenderRouted@1.

the SDK — creditApplication.multiLenderRoute
import { creditApplication } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await creditApplication.multiLenderRoute()
POST /credit-applications/multi-lender-route
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.

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

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

EmitsCreditApplication.residenceVerified@1.

the SDK — creditApplication.residence
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"})
POST /credit-applications/residence
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.

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

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

EmitsCreditApplication.stipsCleared@1.

the SDK — creditApplication.stips
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"})
POST /credit-applications/stips
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.

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

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

EmitsCreditApplication.withdrawn@1.

the SDK — creditApplication.withdraw
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"})
POST /credit-applications/withdraw
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.

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

PropertyTypeNotes
ididapp_
applicantIdref→Party
coApplicantsref→Party[]
lenderIdref→Lender
decisionCreditDecision
stipsref→Stip[]
adverseActionAdverseAction
statusCreditFSM

Relationships

FromToCardinalityAs
dealcreditApplication1:0..1financed
creditApplicationlender*:1routed to
creditApplicationpreApproval1:0..1promoted 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.