🌐 US-Proxy
>; the forty bespoke doors don't, so a body-keyed rule silently fails on every one of them (that flashed the hamburger white on hover, 2026-07-28). Guarded by a test. */ .estate-nav[data-s="dark"]{background:#0A1411;border-bottom-color:#20342B;color:#DCE7E0} .estate-nav[data-s="dark"] .lockup .stop{color:#35B183} .estate-nav[data-s="dark"] .estate-layers a:hover,.estate-nav[data-s="dark"] .estate-layers .sl-here{color:#35B183} .estate-nav[data-s="dark"] .estate-layers .sl-held{color:#8BA396} .estate-nav[data-s="dark"] .estate-nav-body{background:#0A1411;border-bottom-color:#20342B} .estate-nav[data-s="dark"] .estate-layers a{border-top-color:#20342B} .estate-nav[data-s="dark"] .nav-cta{color:#DCE7E0!important;border-color:#20342B} .estate-nav[data-s="dark"] .nav-cta:hover{border-color:#DCE7E0} .estate-nav[data-s="dark"] .nav-partner{background:#35B183;color:#0A1411} .estate-nav[data-s="dark"] .nav-partner:hover{filter:brightness(1.06);color:#0A1411} .estate-nav[data-s="dark"] .nav-btn:hover{background:rgba(255,255,255,.06)} .nav-state:checked ~ .estate-nav .i-menu{opacity:0;transform:rotate(90deg) scale(.7)} .nav-state:checked ~ .estate-nav .i-close{opacity:1;transform:none} .nav-state:focus-visible ~ .estate-nav .nav-btn{outline:2px solid var(--accent,var(--green,#0E6B4A));outline-offset:2px} @media(min-width:861px){ .estate-nav-row{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:16px} .estate-nav-row .lockup{grid-column:1;justify-self:start} .estate-nav-body{display:contents} .estate-layers{grid-column:2;justify-self:center;flex-wrap:nowrap;column-gap:22px} /* The right slot: field and/or CTA share one grid cell as a flex row, so if a surface ever passes BOTH they sit side by side instead of overlapping. */ .estate-nav-end{grid-column:3;justify-self:end;display:flex;align-items:center;gap:12px} .estate-nav-end .vin-field--bar{width:260px;max-width:100%} } @media(max-width:860px){ .estate-nav-row .nav-btn{display:inline-flex} /* EVERY SHELL TOKEN IN THIS SHEET NAMES BOTH VOCABULARIES. --bg / --rule / --accent are the shared SHELL's semantic slots (styles.ts). The forty bespoke doors render their :root from rootCss(), which emits --paper / --line / --green and has NEVER carried the shell's names. So on every bespoke door the bar and the open menu both resolved to rgba(0,0,0,0) — a transparent header with the page scrolling through it, and a transparent dropdown. It looked correct on the shell and broke on forty doors, which is why a shell-only check passed it. Fallback chain, not a rename: shell slot, then door token, then literal. */ /* THE DROPDOWN MUST NAME BOTH TOKEN VOCABULARIES. --bg / --rule are the shared SHELL's semantic slots (styles.ts). The forty bespoke doors render their :root from rootCss(), which emits --paper and --line and has never carried --bg or --rule. So on every bespoke door the open menu resolved to rgba(0,0,0,0) — a transparent panel with the page scrolling behind it. It looked right on the shell and broke everywhere else, which is why a shell-only check would have passed it. Fallback chain, not a rename: shell slot, then door token, then literal. */ .estate-nav-body{position:absolute;top:100%;left:0;right:0;z-index:50;flex-direction:column;align-items:stretch;gap:14px;background:var(--bg,var(--paper,#FFFFFF));border-bottom:1px solid var(--rule,var(--line,#E4E8E5));padding:16px 24px 20px;opacity:0;transform:translateY(-10px);pointer-events:none;transition:opacity .24s ease,transform .28s cubic-bezier(.2,.7,.3,1)} /* .estate-nav-end unwraps here so field/CTA keep their own dropdown slots (field on top, CTA lower) instead of grouping as they do on desktop. */ .estate-nav-end{display:contents} .estate-nav-body .vin-field--bar{order:0} .estate-layers{order:1;flex-direction:column;align-items:stretch;column-gap:0;row-gap:0;font-size:1.05rem} .estate-layers a,.estate-layers .sl-here,.estate-layers .sl-held{display:flex;align-items:center;min-height:54px;padding:0;border-top:1px solid var(--rule,var(--line,#E4E8E5))} .estate-nav-body .nav-cta{order:2;justify-content:center;margin-top:4px} .estate-nav-body .nav-partner{order:3;justify-content:center;margin-top:4px;width:100%;min-height:48px;font-size:1rem;font-weight:700;font-family:var(--sans-display)} .nav-state:checked ~ .estate-nav .estate-nav-body{opacity:1;transform:none;pointer-events:auto} } /* The shared menu-toggle machinery EstateNav renders: the sr-only checkbox, the hamburger button + its menu/close icon, the scrim, and the scroll lock. The nav STRUCTURE (bar grid, layers, CTA, mobile dropdown) lives in estateNavCss above; the old .nav-inner / .nav-links / .nav-panel / .np-* sheet was retired with DoorNav (2026-07-27). Icon-swap + focus are scoped to .estate-nav there. */ .sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0} .nav-state{position:fixed;top:0;left:0} .nav-btn{display:none;align-items:center;justify-content:center;width:48px;height:48px;margin-right:-12px;border-radius:8px;cursor:pointer;position:relative;z-index:2;color:inherit} .nav-btn:hover{background:#F5F7F6} .nav-ico,.nav-ico svg,.nav-ico path,.nav-ico span{pointer-events:none} .nav-ico{position:relative;width:24px;height:24px;display:block} .nav-ico > span{position:absolute;inset:0;display:block;width:24px;height:24px;transition:opacity .22s ease,transform .28s cubic-bezier(.2,.7,.3,1)} .nav-ico svg{width:24px;height:24px;display:block} .i-close{opacity:0;transform:rotate(-90deg) scale(.7)} .nav-scrim{display:none;position:fixed;inset:0;z-index:40;background:rgba(11,18,15,.28);opacity:0;pointer-events:none;transition:opacity .26s ease} .nav-state:checked ~ .nav-scrim{opacity:1;pointer-events:auto} /* THE SCROLL LOCK — clip, never hidden. overflow:clip is not a scroll container, so nothing clamps the offset to 0; both Chromium and WebKit hold position. */ body:has(.nav-state:checked){overflow:clip} .nav-scrim{overscroll-behavior:contain} .nav-state:checked ~ .nav-scrim{touch-action:none} @media(max-width:860px){ .nav-scrim{display:block} } /* ---- ranks: the ground ------------------------------------------------ */ .price,.price-col,.price-block{ --p-ink:#0B120F;--p-soft:#3C4642;--p-muted:#66716B; --p-posted:#0E6B4A;--p-rule:#E4E8E5; } [data-ground="dark"] .price,[data-ground="dark"] .price-col,[data-ground="dark"] .price-block, [data-s="dark"] .price,[data-s="dark"] .price-col,[data-s="dark"] .price-block, [data-surface="dark"] .price,[data-surface="dark"] .price-col,[data-surface="dark"] .price-block, .dark .price,.dark .price-col,.dark .price-block{ --p-ink:#F2F7F4;--p-soft:#DCE7E0;--p-muted:#8BA396; --p-posted:#35B183;--p-rule:#20342B; } /* ---- ranks: the type -------------------------------------------------- */ .price-eyebrow{ display:block;font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.68rem;font-weight:600; letter-spacing:.22em;text-transform:uppercase;color:var(--p-muted,#66716B); } .price-lead{ display:block;font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace; font-size:clamp(1.5rem,1.05rem + 1.35vw,1.875rem); font-weight:600;letter-spacing:-.02em;line-height:1.05;color:var(--p-ink,#0B120F); font-variant-numeric:tabular-nums;white-space:nowrap; } /* Posted takes the green (tokens.ts: the trust signal is the stop, posted prices, primary actions). Quoted never does — a quote is not certified. */ .price-lead[data-price="posted"]{color:var(--p-posted,#0E6B4A)} .price-lead[data-price="quoted"]{color:var(--p-ink,#0B120F)} .price-sum{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:1.0625rem;font-weight:600; letter-spacing:-.01em;color:var(--p-ink,#0B120F);text-align:right;white-space:nowrap; font-variant-numeric:tabular-nums; } .price-line{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.875rem;font-weight:500; color:var(--p-ink,#0B120F);text-align:right;white-space:nowrap; font-variant-numeric:tabular-nums; } .price-qual{ display:block;font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.8125rem;font-weight:400; line-height:1.5;color:var(--p-soft,#3C4642);font-variant-numeric:tabular-nums; } .price-qual + .price-qual{margin-top:4px} /* An anchor is a Qualifier that names its source and its date. It is never a was/now: attestation has no before-price, so the strike is refused here rather than trusted not to be authored. */ .price-anchor{color:var(--p-muted,#66716B)} .price-lead,.price-sum,.price-line,.price-qual,.price-anchor,.price-slot{text-decoration:none} .price-lead s,.price-sum s,.price-line s,.price-qual s,.price-anchor s, .price-lead del,.price-qual del,.price-anchor del{text-decoration:none;font-style:normal} /* The slot inherits the rank it stands in for and is capped at Line. It never takes weight >=600, never green, never full ink. */ .price-slot{color:var(--p-muted,#66716B);font-weight:400;letter-spacing:.04em} .price-sum.price-slot{font-size:.875rem;font-weight:400} .price-lead.price-slot{font-size:1.0625rem;font-weight:400;letter-spacing:.04em} /* ---- the column: ONE shrink-wrapped box (THE ALIGNMENT LAW, §11/§12.5) -- */ .price-col{ display:grid;grid-template-columns:minmax(0,1fr) max-content; gap:0 16px;align-items:baseline;font-variant-numeric:tabular-nums; } .price-col > .price-line,.price-col > .price-sum{grid-column:2} .price-col > .price-rule{grid-column:1 / -1;height:1px;background:var(--p-rule,#E4E8E5);margin:8px 0} /* A price that is also a link is still an address: 44px target, no colour hand-off to the link rule. */ a.price-lead,a.price-sum,a.price-line{display:inline-block;padding:12px 0;margin:-12px 0} a.price-lead:hover,a.price-sum:hover,a.price-line:hover{text-decoration:underline;text-underline-offset:4px} /* ======================================================================= */ /* ADOPTION — the hooks the shipped landings already emit, resolved onto */ /* the five ranks. Every selector below was measured on the served artifact */ /* on 2026-07-26; all of them sit on a white or paper-2 ground, so the ink */ /* values are safe without a per-door ground test. */ /* ======================================================================= */ /* Line: 12 distinct renderings across 126 figures, collapsed to one. */ .stk-rows .amt,.ord-rows .amt,.order-rows .amt,.order-rows .o-amt,.pay-rows .amt, .venue-rows .v-price,.comp-rows .c-price:not(.h),.result-rows .r-price, .option-rows .o-pay{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.875rem;font-weight:500; color:#0B120F;text-align:right;white-space:nowrap; font-variant-numeric:tabular-nums; } /* Sum: 21 of 22 shipped renderings already agreed at 17px/600/ink. The outlier is sticker's Monroney facsimile (.msrp-*), which is a reproduction of a printed label and keeps its own smaller scale on purpose — promoting it made an unpriced total the loudest money on that page, measured, so it is excluded here rather than argued with. */ .stk-total .amt,.ord-total .amt,.order-total .amt,.order-total .o-amt, .pay-out .amt{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:1.0625rem;font-weight:600; letter-spacing:-.01em;color:#0B120F;white-space:nowrap; font-variant-numeric:tabular-nums; } /* Lead: the door's own posted price. vhr.vin's posted block is the estate's only shipped instance where the real price stands alone in its own element; the peer SKU beneath it takes the Sum rank, per §12.2. */ .posted-rows li:first-child .amt{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:clamp(1.5rem,1.05rem + 1.35vw,1.875rem); font-weight:600;letter-spacing:-.02em;line-height:1.05;color:#0E6B4A; font-variant-numeric:tabular-nums; } .posted-rows li + li .amt{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:1.0625rem;font-weight:600; letter-spacing:-.01em;color:#0B120F;font-variant-numeric:tabular-nums; } /* Qualifier: the TTL/anchor line under a posted price, and the ladder rung's own explanatory clause. 4.9:1 muted -> 9.8:1 ink-soft. */ .posted-rows .amt small,.rung-what,.rung-text{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.8125rem;font-weight:400; line-height:1.5;color:#3C4642;font-variant-numeric:tabular-nums; } .posted-rows .amt small{display:block;margin-top:4px} /* The price pair inside a proof card is two peer SKUs: Sum rank, one ink. (The same two prices inside .close-row are label text on a button — one of them aria-disabled — so they are left to the door: restyling them would dress a disabled control as an active one.) */ .proof-prices .pp b{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:1.0625rem;font-weight:600; letter-spacing:-.01em;color:#0B120F;font-variant-numeric:tabular-nums; } /* Slot: figures a landing shows the shape of but does not post — the five value bands, the register slot lines. They keep their size, and their place in the column, and stop impersonating a price. (sticker's option prices are withheld by a ratified rule, not merely unpriced; they already render at the slot's weight and ink and are left where they are — sizing them up would draw the eye to a figure the door is deliberately not showing.) */ .st-slot,.r-slots,.m-slots{ font-weight:400;color:#66716B;letter-spacing:.04em; font-variant-numeric:tabular-nums; } /* The door's own posted fee sentence keeps the posted green (it is a posted price) and gains the Qualifier's size and weight. */ .sheet-fee,.order-fee,.zero-fee{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.8125rem;font-weight:500; color:#0E6B4A; } /* Tabular on every money column box, not on each figure — insurance against a face swap. Measured cost today: 0.00px (Fira Code digit-width delta 0). */ .stk-rows,.ord-rows,.order-rows,.pay-rows,.opt-rows,.venue-rows,.comp-rows, .result-rows,.option-rows,.posted-rows,.pay-grid,.doc-msrp,.proof-prices, .close-row{font-variant-numeric:tabular-nums} /* Money is never struck through, anywhere, however it was authored. */ .stk-rows s,.ord-rows s,.order-rows s,.pay-rows s,.posted-rows s,.opt-rows s, .comp-rows s,.venue-rows s,.result-rows s,.option-rows s{text-decoration:none} /* Below 414px the label column and the money column compete for the same ~290px. The Line rank steps down one notch so the figure never buys its width out of the line name — measured on insure.vin, whose .what label was clipping 3px further at 375px before this step existed. Sum:Line holds at 17/13 = 1.31x, still inside §12.2. */ @media(max-width:414px){ .stk-rows .amt,.ord-rows .amt,.order-rows .amt,.order-rows .o-amt,.pay-rows .amt, .venue-rows .v-price,.comp-rows .c-price:not(.h),.result-rows .r-price, .option-rows .o-pay{font-size:.8125rem} } @media(max-width:560px){ .posted-rows li:first-child .amt{text-align:left} } .next-rows a,.product-rows a,.rec-rows a,.rail-rows a,.dir-rows a,.grammar-rows a{ /* Square, not rounded (founder ruling 2026-08-04): the row hover/focus fill sits flush. One shared value so no door drifts back to a radius. */ padding-left:12px;padding-right:12px;border-radius:0; } @media(max-width:700px){ .next-rows .addr,.product-rows .addr,.rec-rows .addr,.rail-rows .addr,.dir-rows .addr,.grammar-rows .addr{grid-column:1;grid-row:1} .next-rows .arrow,.product-rows .arrow,.rec-rows .arrow,.rail-rows .arrow,.dir-rows .arrow,.grammar-rows .arrow{grid-column:2;grid-row:1;align-self:center} .next-rows .desc,.product-rows .desc,.rec-rows .desc,.rail-rows .desc,.dir-rows .desc,.grammar-rows .desc{grid-column:1 / -1;grid-row:2} } /* THE AGENT BAND'S CODE SAMPLE — scrolls in its own box, never wraps. Founder ruling 2026-07-28, superseding the ≤860px pre-wrap fit that shipped here: code keeps its line shape at every width and the box scrolls horizontally inside itself (white-space:pre + overflow-x:auto). Every door also ships the same pair locally on .demo-pre; this shared rule enforces the ruling for any door whose local block goes missing — the apis.vin case, where the absent block let the raw pre push ~660px of page-level scroll at 320px. */ .demo-pre{white-space:pre;overflow-x:auto;overflow-wrap:normal} /* THE AGENT BAND SITS IN THE PAGE, not against the glass. The band is full-bleed by design — its rule and ground span the viewport — but its CONTENT belongs in the same measure as everything above it. Three treatments shipped across the estate: 20 doors padding:5.5rem max(28px,calc((100% - var(--wrap))/2)) 6rem correct 16 doors padding:5.5rem 0 6rem no padding at all 6 doors padding:5.5rem 28px 6rem 28px, no measure So on 22 of 40 doors "for the agent you send" ran to the window edge while the section above it stopped at the wrap. Only the horizontal padding is set here — each door keeps its own vertical rhythm, border and ground. The +28px is not a fudge. A normal section is .wrap — max-width:var(--wrap) AND 28px of padding inside it — so its CONTENT is var(--wrap) minus 56, not var(--wrap). Centring a full-bleed band on var(--wrap) alone therefore left the agent band 56px wider than everything above it and 28px further out on each side: 1040 against 984 at a 1440 viewport. Below the wrap both clamp to 28px, which is why this only ever showed on desktop. */ .agent{ padding-left:max(28px,calc((100% - var(--wrap))/2 + 28px)); padding-right:max(28px,calc((100% - var(--wrap))/2 + 28px)); } .estate-footer{background:#0A1411;color:#DCE7E0;border-top:1px solid #20342B} .estate-footer .wrap{max-width:var(--wrap);margin:0 auto;padding:0 28px} .estate-footer .stop{color:#35B183} .estate-footer a:focus-visible{outline:2px solid #35B183;outline-offset:3px;border-radius:2px} .ef-ident{padding:3.2rem 0 2.4rem;display:flex;align-items:flex-start;justify-content:space-between;gap:20px 40px;flex-wrap:wrap} .ef-word{font-family:'Sora', -apple-system, 'Segoe UI', Roboto, Helvetica, sans-serif;font-weight:700;font-size:clamp(1.3rem,2.6vw,1.6rem);letter-spacing:-.02em;color:#F2F7F4;line-height:1} .ef-line{margin-top:.55rem;font-size:.88rem;color:#8BA396} .ef-auth{display:inline-flex;align-items:baseline;gap:12px;flex-wrap:wrap;text-decoration:none;border:1px solid #20342B;border-radius:12px;padding:12px 18px;transition:border-color .16s ease} .ef-auth:hover{border-color:#35B183} .ef-auth-addr{font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-weight:500;color:#35B183;font-size:.9rem} .ef-auth-what{color:#8BA396;font-size:.86rem} .ef-seam{border:0;border-top:1px solid #20342B} .ef-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:2.6rem 40px;padding:3rem 0} .ef-pw{font-family:'Sora', -apple-system, 'Segoe UI', Roboto, Helvetica, sans-serif;font-weight:700;font-size:1rem;letter-spacing:-.01em;color:#F2F7F4;line-height:1.1} .ef-doors{list-style:none;display:flex;flex-direction:column;margin-top:.5rem} .ef-door{font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.8rem;font-weight:400;line-height:1.3;display:block;padding:3.5px 0;color:#8BA396;text-decoration:none;transition:color .13s ease} a.ef-door:hover{color:#35B183} .ef-held{color:#5E6E66} .ef-base{padding:1.9rem 0 3rem;display:flex;align-items:center;justify-content:space-between;gap:12px 24px;flex-wrap:wrap;font-size:.82rem;color:#8BA396} .ef-house{font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.78rem;display:flex;gap:14px;flex-wrap:wrap;align-items:center} .ef-house .ef-door{display:inline;padding:0} .ef-sep{opacity:.45} @media(max-width:520px){ .estate-footer .ef-cols{grid-template-columns:repeat(2,1fr);gap:1.8rem 18px} .estate-footer .ef-door{font-size:.78rem} .estate-footer .ef-ident{flex-direction:column} .estate-footer .ef-auth{width:100%} }
dms.vin

The DMS built for agents.
Not humans.

No screens. Addresses.

Every DMS ever sold was built for humans — screens, logins, modules, licenses, training. dms.vin is the dealer management system whose primary user is an agent. No screens to learn, because the surface is addresses: every noun of the store answers at its own URL, typed, and every write runs under a Mandate with a receipt. Built on the VIN by Vin.

The GM’s assistant, the group’s analyst bot, the buying agent on the other side of a deal — they all read the same record the store runs on.

Read the bookAgentic Car Business — agent-led sales motions, free PDF

01 / 05

The store as addresses.

Every module you bought screens for is a door that answers.

One unit, every moduledms.vin/JM3KFBXY1S0597748

JM3KFBXY1S0597748

2025 Mazda CX-5

Four modules, one VIN, zero screens: each read is an address, and the answer is the same for every agent that asks. This card states structure, not prices.

02 / 05

Reads and writes.

Reads are free and keyless. Writes run under a Mandate.

A read answers anyone who holds the address — your agent, your group’s analyst, the buying agent across the deal — and it answers typed: OK · EMPTY · BLOCKED · OFFER. A write carries its authority with it: who acted, on what Mandate, when — posted to the store’s ledger as an event with a receipt.

Every money line is a posted slot until the record fills it. No figure is invented on this page.

the bridge, gated — the write paththe sync path into the DMS you already run — inventory, deal push, RO data — is not yet on the wire. Until it lands, this door attests structure and posted slots and transacts nothing. The one DMS write on the wire today is ledger.dmsPost, in sandbox. The read path is different: the permissioned bridge below carries it, because the dealer authorizes their own connection. Reading the record stays free everywhere.

The deal jacketone order · commerce.vin
The orderevery line at its own member addressposts live

Every figure posts at its line’s own address, on one order at commerce.vin, before anything signs. This page states structure, not prices.

reading the record: $0 · no account · no per-user licenses · no screens

03 / 05

The permissioned bridge.

Your agents read the DMS you already run — because you authorized it.

dms.vin is not only the store spoken as addresses. It is also how any dealer gives their agents access to the DMS they already run. The dealer grants explicit legal authorization; from then on, a dedicated, isolated browser session per user runs the dealer’s own credentials with geographically local egress — the user’s session, acting as the user, at the user’s direction.

No DMS-vendor certification stands between a store and its own record: the dealer authorizes their own connection.

the connectionintegrates.vinthe dealer authorizes and manages their own DMS connection at the integration door. The picker of named systems lives there, never on this page.

the consumer twinconnects.vinthe same permissioned pattern for a consumer’s own factory and insurance accounts — that door’s story, not this one.

Two architectural lineshow permissioned data is handled
  • 01never ingestedpermissioned data is never ingested into the platform’s data lake — it lives and dies inside the user’s sessionsession-scoped
  • 02never resoldVin never purchases or resells third-party reports — unified views render from the customer’s own credentialed accountsyour accounts

Both lines are architecture, not policy copy: the user’s session is the boundary. When the session ends, Vin holds none of it.

04 / 05

The two counters.

Your agents and the buying agents read the same record.

A DMS built for humans shows the store one thing and the market another. A record spoken as addresses cannot: the number your desk reads is the number the buying agent reads, and neither waits on a login to get it.

The store that posts clean numbers is the store agents can transact with.

your agentthe posted recordthe buying agent

the motionb2a.vinthe buying agent arrives on its own account — discovery, typed answers, worst-case cost posted before the call

the same record, machine-readno key
# one MCP server for the whole platform
POST https://apis.vin/mcp
{"method": "tools/call",
 "params": {"name": "decode_vin",
   "arguments": {"vin": "JM3KFBXY1S0597748"}}}

# the one DMS write on the wire today — sandbox
ledger.dmsPost · POST /ledgers/dms-post
emits Ledger.dmsPosted@1 // status: sandbox · gate: offer
  • One MCP server for the whole platform: apis.vin/mcp
  • Every read answers typed; the record reads need no key
  • Every write posts to the ledger with the Mandate it acted on
  • Agent payments settle programmatically: x402

Where an agent works the store’s record for a principal, every read and every write it makes here — survives being shown to them afterward.

05 / 05

Start.

One developer door. The systems you already run connect at their own address.

There is no install and no migration weekend. The record is already addressable: reads answer today, free and keyless, and developer or embed integration intent enters at the developer door — not here.

Address. Read. Write — in that order, and the first two are open now.

The store plandms.vin
Address — every noun of the store, at its URL
Read — free, keyless, typed
Write — Mandate-scoped, receipted; the bridge is gated

The first two steps are open on every live door. The third posts here as it lands, capability by capability — sandbox first, attested on this page, never announced ahead of the wire.

The deal still settles at commerce.vin.

This page describes the store’s record; the money posts at member addresses, on one order at commerce.vin. The door never re-mints a number — it reads the record the store already runs on. The dealer of record is cloud.motors.vin; the dealers’ entrance to the same rails is dealers.vin.

reading the record: $0 · no account · no per-user licenses · no screens

reads at another layerdeveloper & embed integration → apis.vin · connect the systems you already run → integrates.vin

For the agent you send

The agent reads the same record you do. Same two routes, three representations — the numbers never differ between them.

motions: B2A · B2A2D

curl https://dms.vin/ -H 'accept: text/markdown'        → the markdown twin of this page
curl https://dms.vin/{VIN} -H 'accept: application/json' → the record as typed evidence objects
curl https://dms.vin/{VIN} -H 'accept: text/markdown'    → the record's markdown twin

Machine surfaces on this host: /llms.txt · /icp.json · /.well-known/agents.json · one MCP server for the whole platform — apis.vin/mcp (every door a lens; tool results carry the door URL).

Attribution: X-Client-Type: html | md | json | mcp — read for agent-led demand attribution; it never changes the record.