totalLoss
The totalLoss noun — identity, lifecycle, events, and every capability as an anchored section: 10 capabilities, 0 live, 10 sandbox, 0 declared.
totalLoss is one of the estate's 317 automotive nouns — a job a car needs done. It carries 10 capabilities: 0 live, 10 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | totalLoss |
| Pillar | Services (facets: 3 data · 4 services · 3 commerce) |
| Capabilities | 10 — 0 live · 10 sandbox · 0 declared |
| Entities | TotalLoss |
| Doors | aggregator.vin |
| SDK | Vin.totalLoss.* from apis.vin |
| Address | /catalog/totalLoss#{action} — the anchor IS the wire name minus totalLoss. |
Lifecycle
TotalLoss — TotalLossSalvageFSM: 7 states, 6 transitions — ClaimOpened · AcvDetermined · TotalLossConfirmed · Repairable · SalvageAssigned · SalvageSold · Subrogation. Each transition is a past-tense event on the record.
Events
The vocabulary this noun can append to the record — 10 past-tense, versioned event types, each linked to the capability that emits it:
TotalLoss.acvDetermined@1— emitted byacvTotalLoss.confirmed@1— emitted bydetermineTotalLoss.failed@1— emitted byacv·settlement·taxRefundTotalLoss.negativeEquityCoordinated@1— emitted bynegativeEquityCoordinateTotalLoss.ownerRetained@1— emitted byownerRetainTotalLoss.payoffCoordinated@1— emitted bypayoffCoordinateTotalLoss.repairableDetermined@1— emitted bydetermineTotalLoss.salvageAssigned@1— emitted bysalvageTotalLoss.settled@1— emitted bysettlementTotalLoss.taxRefunded@1— emitted bytaxRefund
Pay & settle
taxRefund
totalLoss.taxRefund · POST /total-loss/tax-refund · gate offer · sandbox · answers TotalLossTaxRefund@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) · /5N1DR3DJ3RC307990 (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 — TotalLoss.failed@1 · TotalLoss.taxRefunded@1.
import { totalLoss } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await totalLoss.taxRefund({"vin":"5N1DR3DJ3RC307990"})curl -X POST https://apis.vin/total-loss/tax-refund \
-H 'content-type: application/json' \
-d '{"vin":"5N1DR3DJ3RC307990"}'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": "TotalLossTaxRefund@1",
"value": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "5N1DR3DJ3RC307990",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"evidence": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "5N1DR3DJ3RC307990",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "total-loss-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
acv
totalLoss.acv · POST /total-loss/acv · gate key · sandbox · answers TotalLossAcv@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /5N1DR3DJ3RC307990 (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 — TotalLoss.acvDetermined@1 · TotalLoss.failed@1.
import { totalLoss } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await totalLoss.acv()curl -X POST https://apis.vin/total-loss/acv \
-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": "TotalLossAcv@1",
"value": {
"vin": "1HGCM82633A004352",
"acvRef": "ACV-001O",
"acv": {
"amount": "19100.00",
"currency": "USD"
},
"basis": "retail-average",
"priorDamageOffset": {
"amount": "0.00",
"currency": "USD"
},
"condition": "average",
"asOf": "2026-08-10"
},
"evidence": {
"vin": "1HGCM82633A004352",
"acvRef": "ACV-001O",
"acv": {
"amount": "19100.00",
"currency": "USD"
},
"basis": "retail-average",
"priorDamageOffset": {
"amount": "0.00",
"currency": "USD"
},
"condition": "average",
"asOf": "2026-08-10"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "title-integrity-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}determine
totalLoss.determine · GET /total-loss/determine · gate key · sandbox · answers TotalLossDetermine@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /5N1DR3DJ3RC307990 (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 — TotalLoss.confirmed@1 · TotalLoss.repairableDetermined@1.
import { totalLoss } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await totalLoss.determine({"vin":"5N1DR3DJ3RC307990"})curl 'https://apis.vin/total-loss/determine?vin=5N1DR3DJ3RC307990'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": "TotalLossDetermine@1",
"value": {
"vin": "5N1DR3DJ3RC307990",
"determinationRef": "TL-000K",
"acv": {
"amount": "18400.00",
"currency": "USD"
},
"repairCost": {
"amount": "4200.00",
"currency": "USD"
},
"thresholdRatio": 0.75,
"damageRatio": 0.228,
"totalLoss": false,
"salvageRouteRequired": false,
"asOf": "2026-08-10"
},
"evidence": {
"vin": "5N1DR3DJ3RC307990",
"determinationRef": "TL-000K",
"acv": {
"amount": "18400.00",
"currency": "USD"
},
"repairCost": {
"amount": "4200.00",
"currency": "USD"
},
"thresholdRatio": 0.75,
"damageRatio": 0.228,
"totalLoss": false,
"salvageRouteRequired": false,
"asOf": "2026-08-10"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "title-integrity-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}negativeEquityCoordinate
totalLoss.negativeEquityCoordinate · POST /total-loss/negative-equity-coordinate · gate key · sandbox · answers TotalLossNegativeEquityCoordinate@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /5N1DR3DJ3RC307990 (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 — TotalLoss.negativeEquityCoordinated@1.
import { totalLoss } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await totalLoss.negativeEquityCoordinate()curl -X POST https://apis.vin/total-loss/negative-equity-coordinate \
-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": "TotalLossNegativeEquityCoordinate@1",
"value": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "1HGCM82633A004352",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"evidence": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "1HGCM82633A004352",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "total-loss-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}ownerRetain
totalLoss.ownerRetain · POST /total-loss/owner-retain · gate offer · sandbox · answers TotalLossOwnerRetain@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) · /5N1DR3DJ3RC307990 (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 — TotalLoss.ownerRetained@1.
import { totalLoss } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await totalLoss.ownerRetain({"vin":"5N1DR3DJ3RC307990"})curl -X POST https://apis.vin/total-loss/owner-retain \
-H 'content-type: application/json' \
-d '{"vin":"5N1DR3DJ3RC307990"}'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": "TotalLossOwnerRetain@1",
"value": {
"vin": "5N1DR3DJ3RC307990",
"retentionRef": "TLR-000K",
"fsmState": "TotalLossConfirmed",
"acv": {
"amount": "8411.00",
"currency": "USD"
},
"ownerRetainedSalvageValue": {
"amount": "2355.00",
"currency": "USD"
},
"netSettlement": {
"amount": "5556.00",
"currency": "USD"
},
"salvageBrandRequired": true,
"brandApplied": "salvage",
"rebuildInspectionRequired": true,
"asOf": "2026-08-10"
},
"evidence": {
"vin": "5N1DR3DJ3RC307990",
"retentionRef": "TLR-000K",
"fsmState": "TotalLossConfirmed",
"acv": {
"amount": "8411.00",
"currency": "USD"
},
"ownerRetainedSalvageValue": {
"amount": "2355.00",
"currency": "USD"
},
"netSettlement": {
"amount": "5556.00",
"currency": "USD"
},
"salvageBrandRequired": true,
"brandApplied": "salvage",
"rebuildInspectionRequired": true,
"asOf": "2026-08-10"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "legal-authority-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}payoffCoordinate
totalLoss.payoffCoordinate · POST /total-loss/payoff-coordinate · gate offer · sandbox · answers TotalLossPayoffCoordinate@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) · /5N1DR3DJ3RC307990 (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 — TotalLoss.payoffCoordinated@1.
import { totalLoss } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await totalLoss.payoffCoordinate({"vin":"5N1DR3DJ3RC307990"})curl -X POST https://apis.vin/total-loss/payoff-coordinate \
-H 'content-type: application/json' \
-d '{"vin":"5N1DR3DJ3RC307990"}'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": "TotalLossPayoffCoordinate@1",
"value": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "5N1DR3DJ3RC307990",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"evidence": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "5N1DR3DJ3RC307990",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "total-loss-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}priorDamageOffset
totalLoss.priorDamageOffset · GET /total-loss/prior-damage-offset · gate none · sandbox · answers TotalLossPriorDamageOffset@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /5N1DR3DJ3RC307990 (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 { totalLoss } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await totalLoss.priorDamageOffset()curl 'https://apis.vin/total-loss/prior-damage-offset'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": "TotalLossPriorDamageOffset@1",
"value": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "1HGCM82633A004352",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"evidence": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "1HGCM82633A004352",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "total-loss-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}salvage
totalLoss.salvage · POST /total-loss/salvage · gate offer · sandbox · answers TotalLossSalvage@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) · /5N1DR3DJ3RC307990 (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 — TotalLoss.salvageAssigned@1.
import { totalLoss } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await totalLoss.salvage({"vin":"5N1DR3DJ3RC307990"})curl -X POST https://apis.vin/total-loss/salvage \
-H 'content-type: application/json' \
-d '{"vin":"5N1DR3DJ3RC307990"}'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": "TotalLossSalvage@1",
"value": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "5N1DR3DJ3RC307990",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"evidence": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "5N1DR3DJ3RC307990",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "total-loss-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}settlement
totalLoss.settlement · POST /total-loss/settlement · gate offer · sandbox · answers TotalLossSettlement@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) · /5N1DR3DJ3RC307990 (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 — TotalLoss.failed@1 · TotalLoss.settled@1.
import { totalLoss } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await totalLoss.settlement({"vin":"5N1DR3DJ3RC307990"})curl -X POST https://apis.vin/total-loss/settlement \
-H 'content-type: application/json' \
-d '{"vin":"5N1DR3DJ3RC307990"}'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": "TotalLossSettlement@1",
"value": {
"vin": "5N1DR3DJ3RC307990",
"settlementRef": "TLS-000K",
"fsmState": "TotalLossConfirmed",
"acv": {
"amount": "8411.00",
"currency": "USD"
},
"salesTaxReimbursement": {
"amount": "589.00",
"currency": "USD"
},
"deductible": {
"amount": "500.00",
"currency": "USD"
},
"settlementAmount": {
"amount": "8500.00",
"currency": "USD"
},
"salvageRetainedByCarrier": true,
"asOf": "2026-08-10"
},
"evidence": {
"vin": "5N1DR3DJ3RC307990",
"settlementRef": "TLS-000K",
"fsmState": "TotalLossConfirmed",
"acv": {
"amount": "8411.00",
"currency": "USD"
},
"salesTaxReimbursement": {
"amount": "589.00",
"currency": "USD"
},
"deductible": {
"amount": "500.00",
"currency": "USD"
},
"settlementAmount": {
"amount": "8500.00",
"currency": "USD"
},
"salvageRetainedByCarrier": true,
"asOf": "2026-08-10"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "legal-authority-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}valuation
totalLoss.valuation · GET /total-loss/valuation · gate key · sandbox · answers TotalLossValuation@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /5N1DR3DJ3RC307990 (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 { totalLoss } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await totalLoss.valuation({"vin":"5N1DR3DJ3RC307990"})curl 'https://apis.vin/total-loss/valuation?vin=5N1DR3DJ3RC307990'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": "TotalLossValuation@1",
"value": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "5N1DR3DJ3RC307990",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"evidence": {
"noun": "totalLoss",
"asOf": "2026-08-10",
"vin": "5N1DR3DJ3RC307990",
"totalLoss": {
"status": "no-total-loss-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "total-loss-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.
TotalLoss
Schema
| Property | Type | Notes |
|---|---|---|
id | id | tl_ |
claimId | ref→Claim | — |
vin | string | — |
acv | money | — |
salvageId | ref→Salvage | — |
status | TotalLossSalvageFSM | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
totalLoss | insuranceClaim | 1:1 | determines |
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.
TotalLoss · Class model
TotalLoss · 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.
titleInsurance
The titleInsurance noun — identity, lifecycle, events, and every capability as an anchored section: 5 capabilities, 0 live, 5 sandbox, 0 declared.
tow
The tow noun — identity, lifecycle, events, and every capability as an anchored section: 21 capabilities, 0 live, 21 sandbox, 0 declared.