F&I product lifecycle end to end
Rate → sell → administer → cancel → refund — a vehicle service contract's whole life, every step a catalog capability, runnable against the sandbox world.
An F&I product outlives the deal that sold it. The vehicle service contract
is rated off the world's posted plan, sold, registered, and then it goes to
work: a breakdown files a claim, the VscAdjudicationFSM position
adjudicates it, and mid-term the owner may cancel and take the pro-rata
refund. Under the journey-ownership ruling (2026-08-17), every vsc.* door
answers from the risk-money world registry — one deterministic VSC- file
per VIN across the whole lifecycle, the title brand adjudicated before the
sale, the claim arc adjudicated at the observation, and a cancel that
previews EXACTLY the figure the refund moves.
The cast
This journey rides the curated world — deterministic, replayable, every payload provenance-labeled. The full trigger register is at sandbox test triggers.
| World key | Role in this journey |
|---|---|
1FDEALDESKED00000 | The desked deal: retail, unbranded iron — the rate → sell ground, and the clean cancel/refund. |
| Ava Good, 94103 | The super-prime anchor: the world's payer cast. |
1FSH0P0PENED00000 | The opened job: claim Filed — not yet payable. |
1FSH0PEST1MATED00 | The estimated job: Adjudicated — the signal seam's ground. |
1FSH0PPARTSWA1T00 | The parts-wait job: Approved — the payable claim. |
1FSH0PPERF0RMED00 | The performed job: claim Denied — the appeal ground. |
1FSH0P1NV01CED000 | The invoiced job: claim Paid — already settled. |
1FSALVAGE00000000 | Branded iron: the world refuses to rate it. |
1 — Rate the product
The rate is the world's posted plan — VSC-PLAT, three term/mileage rungs,
the payer priced at the persona cast's tier — under the SAME VSC- identity
the eligibility door opened. The eligibility gate is the world's collateral
story: retail, unbranded iron rates; branded iron refuses.
curl 'https://apis.vin/vscs/rate?vin=1FDEALDESKED00000'{
"vin": "1FDEALDESKED00000",
"noun": "vsc",
"asOf": "2026-08-10",
"quote": {
"id": "VSC-7a4b71f2",
"productType": "VSC",
"planCode": "VSC-PLAT",
"terms": [
{ "termMonths": 36, "termMiles": 36000, "retailCents": 219500 },
{ "termMonths": 48, "termMiles": 50000, "retailCents": 249500 },
{ "termMonths": 60, "termMiles": 75000, "retailCents": 279500 }
],
"premiumCents": 122700,
"currency": "USD",
"tier": "super-prime"
},
"payer": { "name": "Ava Good", "castRow": "super-prime", "creditTier": "super-prime" }
}2 — Sell and register
The sale. vsc.quote answers the SAME quote block the rate posted — one
product-table read, two doors — and the contract issues under the same
VSC- id, then registers on the administrator's books (registered), the
world's own deductible on the wire.
curl -X POST 'https://apis.vin/vscs/contract' \
-H 'content-type: application/json' \
-d '{"vin":"1FDEALDESKED00000","firstName":"Ava","lastName":"Good","zip":"94103"}'{
"vin": "1FDEALDESKED00000",
"noun": "vsc",
"asOf": "2026-08-10",
"contract": {
"id": "VSC-7a4b71f2",
"status": "active",
"deductibleCents": 10000,
"currency": "USD"
}
}3 — Administer: the claim arc at the observation
The claim adjudicates off the fleet's VscAdjudicationFSM position at the
observation: a row with no machine answers no-claim-on-file and files at
the initial position; a Filed row answers already-on-file. The status
door serves the stance — the money that should ride beside it is a filed
gap, attested below.
curl 'https://apis.vin/vscs/claim-status?vin=1FSH0PPARTSWA1T00'{
"vin": "1FSH0PPARTSWA1T00",
"noun": "vsc",
"asOf": "2026-08-10",
"claim": { "id": "VSC-016c97e6", "stance": "Approved" }
}4 — Pay the claim
Only the position pays: Filed answers not-yet-approved, Approved pays,
PartiallyApproved pays paid-partial, Denied is denied-not-payable
with the appeal edge open, Appealed holds, and Paid answers
already-paid — the settlement never invents a second outcome. The signal
seam moves the machine: present Vsc.approved@1 on the Adjudicated
exemplar and the same door pays.
curl -X POST 'https://apis.vin/vscs/claim-pay' \
-H 'content-type: application/json' \
-d '{"vin":"1FSH0PPARTSWA1T00"}'{
"vin": "1FSH0PPARTSWA1T00",
"noun": "vsc",
"asOf": "2026-08-10",
"payment": {
"status": "paid",
"id": "VSC-016c97e6",
"amountCents": 310164,
"currency": "USD"
},
"payer": { "name": "Ava Good", "castRow": "super-prime", "creditTier": "super-prime" }
}5 — Appeal a denial
The machine's own recourse: the performed job's denied claim appeals
(appealed), and the already-appealed exemplar refuses a second bite
(already-appealed). This door answers through the universal face,
POST /act (its flat route is not mounted — a filed gap, vin-36q9, not a
detour).
curl -X POST 'https://apis.vin/act' \
-H 'content-type: application/json' \
-d '{"capability":"vsc.appeal","input":{"vin":"1FSH0PPERF0RMED00"}}'{
"vin": "1FSH0PPERF0RMED00",
"noun": "vsc",
"asOf": "2026-08-10",
"appeal": { "status": "appealed", "id": "VSC-dcc800c0" }
}6 — Cancel and refund: one figure, both doors
The owner cancels mid-term. The cancel previews the pro-rata figure and the
refund moves EXACTLY it — refundCents on the cancellation equals
amountCents on the refund, byte-for-byte, under the same VSC- id, on
the clean and the claims-paid exemplar alike.
curl -X POST 'https://apis.vin/vscs/cancel' \
-H 'content-type: application/json' \
-d '{"vin":"1FDEALDESKED00000"}'{
"vin": "1FDEALDESKED00000",
"noun": "vsc",
"asOf": "2026-08-10",
"cancellation": {
"id": "VSC-7a4b71f2",
"status": "cancelled",
"basis": "pro-rata",
"refundCents": 61350,
"currency": "USD"
}
}Where the world refuses
The refusal is typed, never a wall. Branded iron never rates — the same collateral story the valuation, insurance, and history doors tell for the same VIN — and a denied claim refuses payment with the appeal path open.
curl 'https://apis.vin/vscs/rate?vin=1FSALVAGE00000000'{
"vin": "1FSALVAGE00000000",
"noun": "vsc",
"asOf": "2026-08-10",
"quote": { "status": "refused", "reason": "title-branded" },
"payer": { "name": "Ava Good", "castRow": "super-prime", "creditTier": "super-prime" }
}What the record now holds — and what it does not
The walk posts one product story per VIN: one VSC- identity from
eligibility through refund, a title-brand gate on the selling doors, a claim
arc that pays only where the machine stands (and moves under a presented
Vsc.approved@1), and a cancel/refund pair that carries one figure.
Thin ground, attested (each filed as a bd model-gap, per the honest-grade
law — the journey suite pins today's bytes as the tripwire): the claim
money is unmoored from the shop — the payout is not the shop's own
ro.estimate bill, the status door carries no figures, and the refund
posts no claims-paid offset (vin-ymhd); end-of-life iron still sells a VSC,
and the product family carries two price stories — the buy menu's 60-month
figure is not VSC-PLAT's (vin-5b2r); and the flat POST /vscs/appeal
route stays unmounted (vin-36q9). Compose the facts on the record face,
GET /{vin}, at the record.
Next
- Journeys — the roster this walk belongs to.
- Sandbox test triggers — the full deterministic register.
- The catalog — the reference page behind every step above.
Auction end to end
Consignment → run list → the block → settlement → disbursement → transport → title relay — every step a catalog capability, runnable against the sandbox world.
Agent-run estate end to end
Handshake → search → fetch → the exec gate — an agent drives the estate catalog keyless through the one MCP server, against the sandbox world.