The Catalog
The faceted finder over the one queryable catalog — 3947 typed capability descriptors across 317 nouns, every face generated from the same rows.
There is one Vin product: the capability model. It is a single queryable catalog of typed capability descriptors — the source of truth — and every face is a representation of it: this documentation, the SDK, the CLI verb table, the MCP index, the price list, the acceptance suite, and each door's affordances are all projected from these same rows. Because they are generated, they cannot drift.
3947 rows — 124 live · 3823 sandbox · 0 declared — across 317 nouns on 316 noun pages and 20 workflows. Every capability in sandbox is runnable today; live rollout is demand-ranked, and each row states its own mode.
Coverage grade: 100% — 3947 of 3947 rows answer on the wire (124 live, 3823 sandbox). A "grade" is just this count query — (live + sandbox) / total — run against the catalog, so it can never flatter the estate.
34 capabilities have earned standalone pages — promotion is computed (live · price posted · journey citations · own stateSet), recomputed on every regen, never an editorial debate. Every other capability answers at its frozen anchor on its noun page.
abandonedVehicle.declarePOST /abandoned-vehicles/declarekeysandboxabandonedVehicle.lienSalePOST /abandoned-vehicles/lien-salekeysandboxabandonedVehicle.lienTitlePOST /abandoned-vehicles/lien-titlekeysandboxabandonedVehicle.ownerNotifyPOST /abandoned-vehicles/owner-notifykeysandboxaccessory.availabilityGET /accessories/availabilitynonesandboxaccessory.catalogLookupGET /accessories/catalog-lookupnonesandboxaccessory.financePOST /accessories/financeoffersandboxaccessory.fitmentGET /accessories/fitmentnonesandboxaccessory.installPOST /accessories/installoffersandboxaccessory.legalityCheckGET /accessories/legality-checknonesandboxaccessory.lookupGET /accessories/lookupnonesandboxaccessory.orderPOST /accessories/orderoffersandboxaccessory.payPOST /accessories/payoffersandboxaccessory.priceGET /accessories/pricenonesandboxaccessory.programPOST /accessories/programoffersandboxaccessory.quotePOST /accessories/quoteoffersandboxaccessory.removePOST /accessories/removeoffersandboxaccessory.specGET /accessories/specnonesandboxaccessory.warrantyImpactGET /accessories/warranty-impactnonesandboxaccessoryInstall.availabilityGET /accessory-installs/availabilitynonesandboxaccessoryInstall.completePOST /accessory-installs/completeoffersandboxaccessoryInstall.financePOST /accessory-installs/financeoffersandboxaccessoryInstall.fitmentGET /accessory-installs/fitmentnonesandboxaccessoryInstall.installPOST /accessory-installs/installoffersandboxaccessoryInstall.orderPOST /accessory-installs/orderoffersandboxaccessoryInstall.payPOST /accessory-installs/payoffersandboxaccessoryInstall.programPOST /accessory-installs/programoffersandboxaccessoryInstall.quotePOST /accessory-installs/quoteoffersandboxaccessoryInstall.schedulePOST /accessory-installs/scheduleoffersandboxaccessoryInstall.specGET /accessory-installs/specnonesandboxadas.aimPOST /adas/aimoffersandboxadas.calibrationResultGET /adas/calibration-resultnonesandboxadas.dynamicCalibratePOST /adas/dynamic-calibrateoffersandboxadas.orderPOST /adas/orderoffersandboxadas.payPOST /adas/payoffersandboxadas.profileGET /adas/profilenonesandboxadas.quotePOST /adas/quoteoffersandboxadas.requirementLookupGET /adas/requirement-lookupnonesandboxadas.scanGET /adas/scannonesandboxadas.sensorReplacePOST /adas/sensor-replaceoffersandboxadas.specGET /adas/specnonesandboxadas.staticCalibratePOST /adas/static-calibrateoffersandboxadas.verifyPOST /adas/verifyoffersandboxadas.warrantyClaimPOST /adas/warranty-claimoffersandboxadasCalibration.aimPOST /adas-calibrations/aimoffersandboxadasCalibration.claimBillPOST /adas-calibrations/claim-billoffersandboxadasCalibration.completePOST /adas-calibrations/completeoffersandboxadasCalibration.dynamicCalPOST /adas-calibrations/dynamic-caloffersandboxadasCalibration.orderPOST /adas-calibrations/orderoffersandboxadasCalibration.payPOST /adas-calibrations/payoffersandboxadasCalibration.quotePOST /adas-calibrations/quoteoffersandboxadasCalibration.requirementLookupGET /adas-calibrations/requirement-lookupnonesandboxadasCalibration.resultGET /adas-calibrations/resultkeysandboxadasCalibration.roadTestPOST /adas-calibrations/road-testkeysandboxadasCalibration.scanGET /adas-calibrations/scankeysandboxadasCalibration.schedulePOST /adas-calibrations/scheduleoffersandboxadasCalibration.specGET /adas-calibrations/specnonesandboxadasCalibration.staticCalPOST /adas-calibrations/static-caloffersandboxadasCalibration.statusGET /adas-calibrations/statusnonesandboxadasCalibration.verifyPOST /adas-calibrations/verifyoffersandboxadverseAction.auditGET /adverse-actions/auditkeysandboxadverseAction.deliverPOST /adverse-actions/deliveroffersandboxadverseAction.determineGET /adverse-actions/determinekeysandboxadverseAction.noticePOST /adverse-actions/noticeoffersandboxadverseAction.reasonsPOST /adverse-actions/reasonsoffersandboxadverseAction.riskBasedPricingPOST /adverse-actions/risk-based-pricingoffersandboxadvisor.assignPOST /advisors/assignoffersandboxadvisor.availabilityGET /advisors/availabilitynonesandboxadvisor.commissionPOST /advisors/commissionoffersandboxadvisor.followUpPOST /advisors/follow-upoffersandboxadvisor.greetPOST /advisors/greetoffersandboxadvisor.payPOST /advisors/payoffersandboxadvisor.performanceGET /advisors/performancenonesandboxadvisor.upsellPOST /advisors/upselloffersandboxadvisor.workloadGET /advisors/workloadnonesandboxadvisor.writeUpPOST /advisors/write-upoffersandboxaftermarketPart.availabilityGET /aftermarket-parts/availabilitynonesandboxaftermarketPart.crossReferenceGET /aftermarket-parts/cross-referencenonesandboxaftermarketPart.fitmentGET /aftermarket-parts/fitmentnonesandboxaftermarketPart.installPOST /aftermarket-parts/installoffersandboxaftermarketPart.interchangeLookupGET /aftermarket-parts/interchange-lookupnonesandboxaftermarketPart.lookupGET /aftermarket-parts/lookupnonesandboxaftermarketPart.orderPOST /aftermarket-parts/orderoffersandboxaftermarketPart.payPOST /aftermarket-parts/payoffersandboxaftermarketPart.pickPOST /aftermarket-parts/pickoffersandboxaftermarketPart.priceGET /aftermarket-parts/pricenonesandboxaftermarketPart.priceLookupGET /aftermarket-parts/price-lookupnonesandboxaftermarketPart.qualityGradeLookupGET /aftermarket-parts/quality-grade-lookupnonesandboxaftermarketPart.quotePOST /aftermarket-parts/quoteoffersandboxaftermarketPart.refundPOST /aftermarket-parts/refundoffersandboxaftermarketPart.returnPOST /aftermarket-parts/returnoffersandboxaging.agedUnitsGET /agings/aged-unitskeysandboxaging.daysSupplyGET /agings/days-supplykeysandboxaging.flagPOST /agings/flagoffersandboxaging.floorplanCostGET /agings/floorplan-costkeysandboxaging.liquidatePOST /agings/liquidateoffersandboxaging.liquidationPredictGET /agings/liquidation-predictnonesandboxaging.overageRiskGET /agings/overage-riskkeysandboxaging.readGET /agings/readnonesandboxaging.rebalancePOST /agings/rebalanceoffersandboxaging.repriceTriggerPOST /agings/reprice-triggeroffersandboxaging.stockingMixGET /agings/stocking-mixkeysandboxaging.turnGET /agings/turnkeysandboxaging.wholesaleOutPOST /agings/wholesale-outoffersandboxaging.wholesaleTriggerPOST /agings/wholesale-triggeroffersandboxaging.writeDownPOST /agings/write-downoffersandboxai.estateMcpGET /ais/estate-mcpkeyliveai.mandatesGET /ais/mandateshumansandboxairbags.clearCrashDataPOST /airbags/clear-crash-dataoffersandboxairbags.clockspringReplacePOST /airbags/clockspring-replaceoffersandboxairbags.deploymentHistoryGET /airbags/deployment-historynonesandboxairbags.diagnosePOST /airbags/diagnoseoffersandboxairbags.moduleReadGET /airbags/module-readnonesandboxairbags.moduleReplacePOST /airbags/module-replaceoffersandboxairbags.orderPOST /airbags/orderoffersandboxairbags.payPOST /airbags/payoffersandboxairbags.quotePOST /airbags/quoteoffersandboxairbags.recallCheckGET /airbags/recall-checknonesandboxairbags.statusCheckGET /airbags/status-checknonesandboxalignment.adjustPOST /alignments/adjustoffersandboxalignment.measurePOST /alignments/measureoffersandboxalignment.orderPOST /alignments/orderoffersandboxalignment.payPOST /alignments/payoffersandboxalignment.performPOST /alignments/performoffersandboxalignment.printPOST /alignments/printoffersandboxalignment.quotePOST /alignments/quoteoffersandboxalignment.readGET /alignments/readnonesandboxalignment.resultGET /alignments/resultnonesandboxalignment.schedulePOST /alignments/scheduleoffersandboxalignment.specGET /alignments/specnonesandboxalignment.specLookupGET /alignments/spec-lookupnonesandboxalignment.statusGET /alignments/statusnonesandboxallocation.acceptPOST /allocations/acceptoffersandboxallocation.allocatePOST /allocations/allocateoffersandboxallocation.constraintGET /allocations/constraintkeysandboxallocation.eligibilityGET /allocations/eligibilitykeysandboxallocation.orderBankPOST /allocations/order-bankoffersandboxallocation.payPOST /allocations/payoffersandboxallocation.pipelineGET /allocations/pipelinekeysandboxallocation.poolGET /allocations/poolkeysandboxallocation.readGET /allocations/readnonesandboxallocation.reallocatePOST /allocations/reallocateoffersandboxallocation.requestPOST /allocations/requestoffersandboxallocation.swapPOST /allocations/swapoffersandboxallocation.turnAndEarnGET /allocations/turn-and-earnkeysandboxallocation.wholesaleInvoicePOST /allocations/wholesale-invoiceoffersandboxapiKey.createPOST /api-keys/createkeysandboxapiKey.mintPOST /api-keys/mintkeyliveapiKey.revokePOST /api-keys/revokekeysandboxapiKey.rotatePOST /api-keys/rotatekeyliveapiKey.scopePOST /api-keys/scopekeysandboxappointment.availabilityGET /appointments/availabilitynonesandboxappointment.bookPOST /appointments/bookoffersandboxappointment.calendarGET /appointments/calendarkeysandboxappointment.cancelPOST /appointments/canceloffersandboxappointment.capacityGET /appointments/capacitynonesandboxappointment.checkInPOST /appointments/check-inoffersandboxappointment.checkOutPOST /appointments/check-outoffersandboxappointment.confirmPOST /appointments/confirmoffersandboxappointment.depositPOST /appointments/depositoffersandboxappointment.historyGET /appointments/historynonesandboxappointment.markShownPOST /appointments/mark-shownoffersandboxappointment.noShowPOST /appointments/no-showoffersandboxappointment.payPOST /appointments/payoffersandboxappointment.readGET /appointments/readnonesandboxappointment.refundPOST /appointments/refundoffersandboxappointment.remindPOST /appointments/remindoffersandboxappointment.reschedulePOST /appointments/rescheduleoffersandboxappointment.setPOST /appointments/setoffersandboxappointment.slotsGET /appointments/slotsnonesandboxappointment.statusGET /appointments/statusnonesandboxappointment.waitEstimateGET /appointments/wait-estimatekeysandboxappraisal.acceptPOST /appraisals/acceptoffersandboxappraisal.allowancePOST /appraisals/allowanceoffersandboxappraisal.conditionAdjustGET /appraisals/condition-adjustkeysandboxappraisal.equityGET /appraisals/equitykeysandboxappraisal.expirePOST /appraisals/expireoffersandboxappraisal.generatePOST /appraisals/generateoffersandboxappraisal.getGET /appraisals/getkeysandboxappraisal.historyGET /appraisals/historynonesandboxappraisal.honorPOST /appraisals/honoroffersandboxappraisal.inspectPOST /appraisals/inspectoffersandboxappraisal.marketCompsGET /appraisals/market-compskeyliveappraisal.performPOST /appraisals/performoffersandboxappraisal.quotePOST /appraisals/quoteoffersandboxappraisal.readGET /appraisals/readnonesandboxappraisal.requestPOST /appraisals/requestoffersandboxappraisal.valueGET /appraisals/valuekeysandboxapproval.authorizeChargePOST /approvals/authorize-chargeoffersandboxapproval.captureSignaturePOST /approvals/capture-signatureoffersandboxapproval.declinePOST /approvals/declineoffersandboxapproval.depositPOST /approvals/depositoffersandboxapproval.historyGET /approvals/historynonesandboxapproval.payPOST /approvals/payoffersandboxapproval.recordPOST /approvals/recordoffersandboxapproval.remindPOST /approvals/remindoffersandboxapproval.requestPOST /approvals/requestoffersandboxapproval.sendPOST /approvals/sendoffersandboxapproval.statusGET /approvals/statusnonesandboxapproval.thresholdGET /approvals/thresholdnonesandbox
noun × facet × side
The organizing model beneath the catalog. The spine is the noun — 317 automotive nouns, each a job a car needs done, each a page in this Reference. Every noun has three facets, the three capability pillars restated as the three faces of one thing:
- Data — know it. The record: each fact an evidence object.
- Services — do it. The work a car needs, on the quote → order chassis.
- Commerce — transact it. The deal and its payment, folding onto one Deal ledger.
The side tag records who initiates. Workflows compose across the grid and own nothing — each is modeled end to end with its state, sequence, decision, and flow-of-funds diagrams. AI applies over the cells.
Status honesty — the key selects the mode
Every row exists from day one and tells the truth about itself. A status is mode-aware: sandbox is a caller mode, never a status claim, and each row also posts modes — which rail serves its live mode (platform | connection | account | null):
live— the acceptance suite is green; it answers on the wire today on the platform rail.sandbox— wire-compatible simulated responses, provenance-labeled and deterministic. Where the live rail is a certified connection, the row is live via connection — certified, connect to activate at integrates.vin (dealer) / connects.vin (consumer); credential submissions enter the activation queue and rank live rollout.declared— rail-less (modes.live: null), the only rows allowed to read as roadmap. It answers a typedBLOCKED { reason: "DECLARED" }— never a silent 404, never a faked 200.
Workflows
20 compositions over the grid, each modeled end to end. A workflow owns nothing: delete it and every leaf still transacts on its own address.
| Workflow | Status | Route |
|---|---|---|
buy | sandbox | GET /workflows/buy |
claim-to-repair | sandbox | GET /workflows/claim-to-repair |
concierge-broker | sandbox | GET /workflows/concierge-broker |
consignment | sandbox | GET /workflows/consignment |
cpo-certification | sandbox | GET /workflows/cpo-certification |
dealer-stocking | sandbox | GET /workflows/dealer-stocking |
end-of-life | sandbox | GET /workflows/end-of-life |
keep-lifecycle | sandbox | GET /workflows/keep-lifecycle |
lease-return | sandbox | GET /workflows/lease-return |
new-vehicle-build | sandbox | GET /workflows/new-vehicle-build |
oem-allocation-to-frontline | sandbox | GET /workflows/oem-allocation-to-frontline |
private-party | sandbox | GET /workflows/private-party |
refinance | sandbox | GET /workflows/refinance |
repo-to-remarketing | sandbox | GET /workflows/repo-to-remarketing |
sell-trade | sandbox | GET /workflows/sell-trade |
service-drive-ro | sandbox | GET /workflows/service-drive-ro |
total-loss-to-salvage | sandbox | GET /workflows/total-loss-to-salvage |
vsc-claim-adjudication | sandbox | GET /workflows/vsc-claim-adjudication |
wholesale-d2d | sandbox | GET /workflows/wholesale-d2d |
wholesale-dropship | sandbox | GET /workflows/wholesale-dropship |
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.
accessory
The accessory noun — identity, lifecycle, events, and every capability as an anchored section: 15 capabilities, 0 live, 15 sandbox, 0 declared.