docs.vin

deal

The deal noun — identity, lifecycle, events, and every capability as an anchored section: 24 capabilities, 0 live, 24 sandbox, 0 declared.

deal is one of the estate's 317 automotive nouns — a job a car needs done. It carries 24 capabilities: 0 live, 24 sandbox, 0 declared · doors buy.vin · aggregator.vin · desking.vin.

Identity

Noundeal
PillarServices (facets: 8 data · 10 services · 6 commerce)
Capabilities24 — 0 live · 24 sandbox · 0 declared
EntitiesDeal
Doorsaggregator.vin · buy.vin · desking.vin
SDKVin.deal.* from apis.vin
Address/catalog/deal#{action} — the anchor IS the wire name minus deal.

Lifecycle

DealDealLifecycle: 12 states, 14 transitions — QUOTED · CREDIT_PENDING · DESKED · CONTRACTED · FUNDED · IN_FULFILLMENT · DELIVERED · CLOSED · ON_HOLD · CANCELLED · UNWOUND · DECLINED. Each transition is a past-tense event on the record.

Events

The vocabulary this noun can append to the record — 27 past-tense, versioned event types, each linked to the capability that emits it:

Discover & read

read

deal.read · GET /deals/read · gate none · sandbox · answers DealRead@1

FieldTypeRequiredNotes
vinstringno

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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 — deal.read
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.read({"vin":"1C4HJXEN4LW202273"})
GET /deals/read
curl 'https://apis.vin/deals/read?vin=1C4HJXEN4LW202273'

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:10.042Z · HTTP 200
{
  "type": "OK",
  "answers": "DealRead@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "deal": {
      "id": "DL-ef6558d1",
      "position": "QUOTED",
      "orderId": "ORD-e54ea3d9",
      "askingCents": 2300000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "deal": {
      "id": "DL-ef6558d1",
      "position": "QUOTED",
      "orderId": "ORD-e54ea3d9",
      "askingCents": 2300000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

status

deal.status · GET /deals/status · gate none · sandbox · answers DealStatus@1

FieldTypeRequiredNotes
vinstringno

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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 — deal.status
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.status({"vin":"1C4HJXEN4LW202273"})
GET /deals/status
curl 'https://apis.vin/deals/status?vin=1C4HJXEN4LW202273'

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:10.049Z · HTTP 200
{
  "type": "OK",
  "answers": "DealStatus@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "deal": {
      "id": "DL-ef6558d1",
      "position": "QUOTED",
      "orderId": "ORD-e54ea3d9",
      "askingCents": 2300000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "deal": {
      "id": "DL-ef6558d1",
      "position": "QUOTED",
      "orderId": "ORD-e54ea3d9",
      "askingCents": 2300000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

complianceCheck

deal.complianceCheck · GET /deals/compliance-check · gate key · sandbox · answers DealComplianceCheck@1

FieldTypeRequiredNotes
vinstringno

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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 — deal.complianceCheck
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.complianceCheck({"vin":"1C4HJXEN4LW202273"})
GET /deals/compliance-check
curl 'https://apis.vin/deals/compliance-check?vin=1C4HJXEN4LW202273'

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:10.028Z · HTTP 200
{
  "type": "OK",
  "answers": "DealComplianceCheck@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "compliance": {
      "id": "DL-ef6558d1",
      "compliant": true,
      "checks": [
        "tila",
        "ecoa",
        "state-disclosures"
      ],
      "position": "QUOTED"
    }
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "compliance": {
      "id": "DL-ef6558d1",
      "compliant": true,
      "checks": [
        "tila",
        "ecoa",
        "state-disclosures"
      ],
      "position": "QUOTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

quote

deal.quote · POST /deals/quote · gate offer · sandbox · answers DealQuote@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.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.failed@1 · Deal.quoted@1.

the SDK — deal.quote
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.quote({"vin":"1C4HJXEN4LW202273"})
POST /deals/quote
curl -X POST https://apis.vin/deals/quote \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXEN4LW202273"}'

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:10.036Z · HTTP 200
{
  "type": "OK",
  "answers": "DealQuote@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "termMonths": 72,
    "apr": 6.9,
    "dueAtSigning": {
      "amount": "3699.00",
      "currency": "USD"
    },
    "expiresInDays": 3
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "termMonths": 72,
    "apr": 6.9,
    "dueAtSigning": {
      "amount": "3699.00",
      "currency": "USD"
    },
    "expiresInDays": 3
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "desking-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

reprice

deal.reprice · POST /deals/reprice · gate offer · sandbox · answers DealReprice@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.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.repriced@1.

the SDK — deal.reprice
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.reprice({"vin":"1C4HJXEN4LW202273"})
POST /deals/reprice
curl -X POST https://apis.vin/deals/reprice \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXEN4LW202273"}'

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:10.046Z · HTTP 200
{
  "type": "OK",
  "answers": "DealReprice@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "priorPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "delta": {
      "amount": "0.00",
      "currency": "USD"
    },
    "apr": 6.9,
    "termMonths": 72
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "priorPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "delta": {
      "amount": "0.00",
      "currency": "USD"
    },
    "apr": 6.9,
    "termMonths": 72
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "desking-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

open

deal.open · POST /deals/open · gate key · sandbox · answers Deal@1

Promoted — earned its own page: /catalog/deal.open (computed on every regen: price posted + carries its own stateSet).

FieldTypeRequiredNotes
workflowstringyesone of buy, sell-trade, wholesale-dropship, wholesale-d2d, concierge-broker, consignment, private-party, refinance, new-vehicle-build, lease-return, dealer-stocking
vinstringyeslength 17–17
dealTypestringnoone of CONCIERGE_BUY, INSTANT_CASH_OFFER, DROPSHIP, WHOLESALE, CONCIERGE_SEARCH, CONSIGNMENT, PRIVATE_PARTY, REFINANCE, BUILD, LEASE_RETURN
buyerobjectno
sellerobjectno
authoritystringno

Delegated calls require a typed Mandate{ ceiling, perAction, expires, tripwires }; the ceiling is a field, not a conversation.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.advanced@1 · Deal.canceled@1 · Deal.failed@1 · Deal.held@1 · Deal.linked@1 · Deal.opened@1 · Deal.settled@1.

the SDK — deal.open
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.open({"workflow":"buy","vin":"1C4HJXEN4LW202273"})
POST /deals/open
curl -X POST https://apis.vin/deals/open \
  -H 'content-type: application/json' \
  -d '{"workflow":"buy","vin":"1C4HJXEN4LW202273"}'

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:10.034Z · HTTP 200
{
  "type": "OK",
  "answers": "Deal@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "deal": {
      "status": "already-open",
      "id": "DL-ef6558d1",
      "position": "QUOTED"
    }
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "deal": {
      "status": "already-open",
      "id": "DL-ef6558d1",
      "position": "QUOTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": true
  }
}

buyersOrder

deal.buyersOrder · POST /deals/buyers-order · gate offer · sandbox · answers DealBuyersOrder@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.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.buyersOrderIssued@1.

the SDK — deal.buyersOrder
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.buyersOrder({"vin":"1C4HJXEN4LW202273"})
POST /deals/buyers-order
curl -X POST https://apis.vin/deals/buyers-order \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXEN4LW202273"}'

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:10.027Z · HTTP 200
{
  "type": "OK",
  "answers": "DealBuyersOrder@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "buyersOrder": {
      "id": "DL-ef6558d1",
      "orderId": "ORD-e54ea3d9",
      "items": [
        {
          "kind": "vehicle",
          "vin": "1C4HJXEN4LW202273",
          "amountCents": 2300000
        },
        {
          "kind": "doc-fee",
          "amountCents": 8500
        },
        {
          "kind": "sales-tax",
          "amountCents": 189750
        }
      ],
      "totalCents": 2498250,
      "currency": "USD",
      "status": "issued"
    }
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "buyersOrder": {
      "id": "DL-ef6558d1",
      "orderId": "ORD-e54ea3d9",
      "items": [
        {
          "kind": "vehicle",
          "vin": "1C4HJXEN4LW202273",
          "amountCents": 2300000
        },
        {
          "kind": "doc-fee",
          "amountCents": 8500
        },
        {
          "kind": "sales-tax",
          "amountCents": 189750
        }
      ],
      "totalCents": 2498250,
      "currency": "USD",
      "status": "issued"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

onlineCheckout

deal.onlineCheckout · POST /deals/online-checkout · gate key · sandbox · answers DealOnlineCheckout@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.onlineCheckedOut@1.

the SDK — deal.onlineCheckout
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.onlineCheckout()
POST /deals/online-checkout
curl -X POST https://apis.vin/deals/online-checkout \
  -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.742Z · HTTP 200
{
  "type": "OK",
  "answers": "DealOnlineCheckout@1",
  "value": {
    "checkout": {
      "$type": "CheckoutSession",
      "$id": "checkoutsession_cs_1",
      "intentRef": "intent_1",
      "reference": "magic-clear",
      "url": "https://checkout.settlement-rail.sandbox/cs_1",
      "status": "open",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "settlement-rail"
      },
      "providerData": {
        "externalId": "cs_1"
      }
    }
  },
  "evidence": {
    "checkout": {
      "$type": "CheckoutSession",
      "$id": "checkoutsession_cs_1",
      "intentRef": "intent_1",
      "reference": "magic-clear",
      "url": "https://checkout.settlement-rail.sandbox/cs_1",
      "status": "open",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "settlement-rail"
      },
      "providerData": {
        "externalId": "cs_1"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "settlement-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

fund

deal.fund · POST /deals/fund · gate offer · sandbox · answers DealFund@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.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.failed@1 · Deal.funded@1.

the SDK — deal.fund
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.fund({"vin":"1C4HJXEN4LW202273"})
POST /deals/fund
curl -X POST https://apis.vin/deals/fund \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXEN4LW202273"}'

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:10.028Z · HTTP 200
{
  "type": "OK",
  "answers": "DealFund@1",
  "value": {
    "funding": {
      "$type": "Settlement",
      "$id": "settlement_pi_1",
      "intentRef": "intent_1",
      "reference": "1C4HJXEN4LW202273",
      "amount": {
        "amount": "3150000",
        "currency": "USD"
      },
      "status": "settled",
      "payeeRef": "payee-sandbox",
      "settledAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "settlement-rail"
      },
      "providerData": {
        "externalId": "pi_1"
      },
      "ledgerRef": "ledgerentry_pi_1"
    }
  },
  "evidence": {
    "funding": {
      "$type": "Settlement",
      "$id": "settlement_pi_1",
      "intentRef": "intent_1",
      "reference": "1C4HJXEN4LW202273",
      "amount": {
        "amount": "3150000",
        "currency": "USD"
      },
      "status": "settled",
      "payeeRef": "payee-sandbox",
      "settledAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "settlement-rail"
      },
      "providerData": {
        "externalId": "pi_1"
      },
      "ledgerRef": "ledgerentry_pi_1"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "settlement-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

spotDeliver

deal.spotDeliver · POST /deals/spot-deliver · gate offer · sandbox · answers DealSpotDeliver@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.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.reContracted@1 · Deal.spotDelivered@1.

the SDK — deal.spotDeliver
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.spotDeliver({"vin":"1C4HJXEN4LW202273"})
POST /deals/spot-deliver
curl -X POST https://apis.vin/deals/spot-deliver \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXEN4LW202273"}'

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:10.049Z · HTTP 200
{
  "type": "OK",
  "answers": "DealSpotDeliver@1",
  "value": {
    "deposit": {
      "$type": "Deposit",
      "$id": "deposit_dep_1",
      "reference": "1C4HJXEN4LW202273",
      "payerRef": "payer-sandbox",
      "amount": {
        "amount": "100000",
        "currency": "USD"
      },
      "status": "collected",
      "collectedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "invoicing-rail"
      },
      "providerData": {
        "externalId": "dep_1"
      }
    }
  },
  "evidence": {
    "deposit": {
      "$type": "Deposit",
      "$id": "deposit_dep_1",
      "reference": "1C4HJXEN4LW202273",
      "payerRef": "payer-sandbox",
      "amount": {
        "amount": "100000",
        "currency": "USD"
      },
      "status": "collected",
      "collectedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "invoicing-rail"
      },
      "providerData": {
        "externalId": "dep_1"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "invoicing-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

unwind

deal.unwind · POST /deals/unwind · gate offer · sandbox · answers DealUnwind@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.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.failed@1 · Deal.unwound@1 · Lien.unwound@1 · Payment.refunded@1 · ProtectionProduct.canceled@1.

the SDK — deal.unwind
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.unwind({"vin":"1C4HJXEN4LW202273"})
POST /deals/unwind
curl -X POST https://apis.vin/deals/unwind \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXEN4LW202273"}'

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:10.057Z · HTTP 200
{
  "type": "OK",
  "answers": "DealUnwind@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "unwind": {
      "status": "not-yet-funded-rescind-instead",
      "id": "DL-ef6558d1",
      "position": "QUOTED"
    }
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "unwind": {
      "status": "not-yet-funded-rescind-instead",
      "id": "DL-ef6558d1",
      "position": "QUOTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

contingency

deal.contingency · POST /deals/contingency · gate key · sandbox · answers DealContingency@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.contingencySet@1.

the SDK — deal.contingency
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.contingency()
POST /deals/contingency
curl -X POST https://apis.vin/deals/contingency \
  -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.742Z · HTTP 200
{
  "type": "OK",
  "answers": "DealContingency@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "contingency": {
      "id": "DL-4ade9a56",
      "decision": "approved",
      "items": [],
      "status": "none-outstanding"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "contingency": {
      "id": "DL-4ade9a56",
      "decision": "approved",
      "items": [],
      "status": "none-outstanding"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

desk

deal.desk · POST /deals/desk · gate human · sandbox · answers DealDesk@1

FieldTypeRequiredNotes
subjectstringno
salesPricestringyesdecimal string
downPaymentstringno
termintegernomonths
aprstringno
tradeAllowancestringno
structurestringnoone of retail, lease, cash, bhph

The gate is a 403 NEEDS_HUMAN — the human verb authorize (credential: desk-manager) · supply side, routed to a named, staffed, priced terminus with a poll rail. Never a dead end. Price: not posted — see /pricing.

Doordesking.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.desked@1.

the SDK — deal.desk
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.desk({"salesPrice":"salesprice"})
POST /deals/desk
curl -X POST https://apis.vin/deals/desk \
  -H 'content-type: application/json' \
  -d '{"salesPrice":"salesprice"}'

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.742Z · HTTP 200
{
  "type": "OK",
  "answers": "DealDesk@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "desking": {
      "status": "no-deal-on-file"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "desking": {
      "status": "no-deal-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

finalize

deal.finalize · POST /deals/finalize · gate offer · sandbox · answers DealFinalize@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.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.failed@1 · Deal.finalized@1 · Deal.settled@1.

the SDK — deal.finalize
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.finalize({"vin":"1C4HJXEN4LW202273"})
POST /deals/finalize
curl -X POST https://apis.vin/deals/finalize \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXEN4LW202273"}'

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:10.028Z · HTTP 200
{
  "type": "OK",
  "answers": "DealFinalize@1",
  "value": {
    "deal": "deal-1C4HJXEN4LW202273",
    "vin": "1C4HJXEN4LW202273",
    "amountFinanced": {
      "amount": "31404.00",
      "currency": "USD"
    },
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "termMonths": 72,
    "apr": 6.9,
    "state": "finalized"
  },
  "evidence": {
    "deal": "deal-1C4HJXEN4LW202273",
    "vin": "1C4HJXEN4LW202273",
    "amountFinanced": {
      "amount": "31404.00",
      "currency": "USD"
    },
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "termMonths": 72,
    "apr": 6.9,
    "state": "finalized"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "desking-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

grossprofit

deal.grossprofit · GET /deals/grossprofit · gate key · sandbox · answers DealGrossprofit@1

FieldTypeRequiredNotes
vinstringno

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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 — deal.grossprofit
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.grossprofit({"vin":"1C4HJXEN4LW202273"})
GET /deals/grossprofit
curl 'https://apis.vin/deals/grossprofit?vin=1C4HJXEN4LW202273'

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:10.031Z · HTTP 200
{
  "type": "OK",
  "answers": "DealGrossprofit@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "frontGross": {
      "amount": "2520.00",
      "currency": "USD"
    },
    "backGross": {
      "amount": "1450.00",
      "currency": "USD"
    },
    "totalGross": {
      "amount": "3970.00",
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "frontGross": {
      "amount": "2520.00",
      "currency": "USD"
    },
    "backGross": {
      "amount": "1450.00",
      "currency": "USD"
    },
    "totalGross": {
      "amount": "3970.00",
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "desking-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

deal.link · POST /deals/link · gate key · sandbox · answers DealLink@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.dependencyLinked@1.

the SDK — deal.link
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.link()
POST /deals/link
curl -X POST https://apis.vin/deals/link \
  -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.742Z · HTTP 200
{
  "type": "OK",
  "answers": "DealLink@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "link": {
      "status": "no-deal-on-file"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "link": {
      "status": "no-deal-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

paymentCalculator

deal.paymentCalculator · GET /deals/payment-calculator · gate none · sandbox · answers DealPaymentCalculator@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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 — deal.paymentCalculator
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.paymentCalculator()
GET /deals/payment-calculator
curl 'https://apis.vin/deals/payment-calculator'

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.743Z · HTTP 200
{
  "type": "OK",
  "answers": "DealPaymentCalculator@1",
  "value": {
    "amountFinanced": {
      "amount": "31404.00",
      "currency": "USD"
    },
    "apr": 6.9,
    "termMonths": 72,
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "currency": "USD"
  },
  "evidence": {
    "amountFinanced": {
      "amount": "31404.00",
      "currency": "USD"
    },
    "apr": 6.9,
    "termMonths": 72,
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "currency": "USD"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "desking-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

recap

deal.recap · GET /deals/recap · gate key · sandbox · answers DealRecap@1

FieldTypeRequiredNotes
vinstringno

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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 — deal.recap
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.recap({"vin":"1C4HJXEN4LW202273"})
GET /deals/recap
curl 'https://apis.vin/deals/recap?vin=1C4HJXEN4LW202273'

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:10.042Z · HTTP 200
{
  "type": "OK",
  "answers": "DealRecap@1",
  "value": {
    "deal": "deal-1C4HJXEN4LW202273",
    "vin": "1C4HJXEN4LW202273",
    "amountFinanced": {
      "amount": "31404.00",
      "currency": "USD"
    },
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "totalGross": {
      "amount": "3970.00",
      "currency": "USD"
    },
    "status": "recapped"
  },
  "evidence": {
    "deal": "deal-1C4HJXEN4LW202273",
    "vin": "1C4HJXEN4LW202273",
    "amountFinanced": {
      "amount": "31404.00",
      "currency": "USD"
    },
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    },
    "totalGross": {
      "amount": "3970.00",
      "currency": "USD"
    },
    "status": "recapped"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "desking-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

rehash

deal.rehash · POST /deals/rehash · gate offer · sandbox · answers DealRehash@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.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.rehashed@1.

the SDK — deal.rehash
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.rehash({"vin":"1C4HJXEN4LW202273"})
POST /deals/rehash
curl -X POST https://apis.vin/deals/rehash \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXEN4LW202273"}'

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:10.042Z · HTTP 200
{
  "type": "OK",
  "answers": "DealRehash@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "rehash": {
      "status": "no-credit-on-the-table",
      "id": "DL-ef6558d1",
      "position": "QUOTED"
    }
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "noun": "deal",
    "asOf": "2026-08-10",
    "rehash": {
      "status": "no-credit-on-the-table",
      "id": "DL-ef6558d1",
      "position": "QUOTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

rescind

deal.rescind · POST /deals/rescind · gate offer · sandbox · answers RescissionMoneyMap@1

FieldTypeRequiredNotes
subjectstringyes
reasonstringyesone of cooling-off, spot-delivery-unwind, financing-fell-through, buyer-request, compliance
authoritystringno

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.

Delegated calls require a typed Mandate{ ceiling, perAction, expires, tripwires }; the ceiling is a field, not a conversation.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.failed@1 · Deal.rescinded@1 · Lien.unwound@1 · Payment.refunded@1 · ProtectionProduct.canceled@1.

the SDK — deal.rescind
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.rescind({"subject":"subject","reason":"cooling-off"})
POST /deals/rescind
curl -X POST https://apis.vin/deals/rescind \
  -H 'content-type: application/json' \
  -d '{"subject":"subject","reason":"cooling-off"}'

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.743Z · HTTP 200
{
  "type": "OK",
  "answers": "RescissionMoneyMap@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "rescission": {
      "status": "no-deal-on-file"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "rescission": {
      "status": "no-deal-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

resume

deal.resume · POST /deals/resume · gate key · sandbox · answers DealResume@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.resumed@1.

the SDK — deal.resume
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.resume()
POST /deals/resume
curl -X POST https://apis.vin/deals/resume \
  -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.744Z · HTTP 200
{
  "type": "OK",
  "answers": "DealResume@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "resumption": {
      "status": "no-deal-on-file"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "resumption": {
      "status": "no-deal-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

structure

deal.structure · POST /deals/structure · gate offer · sandbox · answers DealStructure@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.

Doorbuy.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.structured@1.

the SDK — deal.structure
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.structure({"vin":"1C4HJXEN4LW202273"})
POST /deals/structure
curl -X POST https://apis.vin/deals/structure \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXEN4LW202273"}'

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:10.051Z · HTTP 200
{
  "type": "OK",
  "answers": "DealStructure@1",
  "value": {
    "vin": "1C4HJXEN4LW202273",
    "price": {
      "amount": "31500.00",
      "currency": "USD"
    },
    "downPayment": {
      "amount": "3000.00",
      "currency": "USD"
    },
    "tradeAllowance": {
      "amount": "0.00",
      "currency": "USD"
    },
    "tradePayoff": {
      "amount": "0.00",
      "currency": "USD"
    },
    "tradeEquity": {
      "amount": "0.00",
      "currency": "USD"
    },
    "tax": {
      "amount": "2205.00",
      "currency": "USD"
    },
    "fees": {
      "amount": "699.00",
      "currency": "USD"
    },
    "amountFinanced": {
      "amount": "31404.00",
      "currency": "USD"
    },
    "apr": 6.9,
    "termMonths": 72,
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "1C4HJXEN4LW202273",
    "price": {
      "amount": "31500.00",
      "currency": "USD"
    },
    "downPayment": {
      "amount": "3000.00",
      "currency": "USD"
    },
    "tradeAllowance": {
      "amount": "0.00",
      "currency": "USD"
    },
    "tradePayoff": {
      "amount": "0.00",
      "currency": "USD"
    },
    "tradeEquity": {
      "amount": "0.00",
      "currency": "USD"
    },
    "tax": {
      "amount": "2205.00",
      "currency": "USD"
    },
    "fees": {
      "amount": "699.00",
      "currency": "USD"
    },
    "amountFinanced": {
      "amount": "31404.00",
      "currency": "USD"
    },
    "apr": 6.9,
    "termMonths": 72,
    "monthlyPayment": {
      "amount": "533.90",
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "desking-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

washout

deal.washout · GET /deals/washout · gate none · sandbox · answers DealWashout@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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 — deal.washout
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.washout()
GET /deals/washout
curl 'https://apis.vin/deals/washout'

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.744Z · HTTP 200
{
  "type": "OK",
  "answers": "DealWashout@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "washout": {
      "status": "no-deal-on-file"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "washout": {
      "status": "no-deal-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

yoyoUnwindProtect

deal.yoyoUnwindProtect · POST /deals/yoyo-unwind-protect · gate key · sandbox · answers DealYoyoUnwindProtect@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1C4HJXEN4LW202273 (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.

EmitsDeal.yoyoUnwindProtected@1.

the SDK — deal.yoyoUnwindProtect
import { deal } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await deal.yoyoUnwindProtect()
POST /deals/yoyo-unwind-protect
curl -X POST https://apis.vin/deals/yoyo-unwind-protect \
  -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.744Z · HTTP 200
{
  "type": "OK",
  "answers": "DealYoyoUnwindProtect@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "protection": {
      "status": "no-deal-on-file"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "deal",
    "asOf": "2026-08-10",
    "protection": {
      "status": "no-deal-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "car-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.

Deal

Schema

PropertyTypeNotes
dealIdiddeal_
workflowstring
dealTypeDealType
vehicleIdref→Vehicle
buyerIdref→Party
sellerIdref→Party
dealerOfRecordIdref→Dealer
authorityref→Mandate
structureDealStructure
stateDealLifecycle
correlationIdW0-EVT
dependsOnref→Deal[]deal→deal DAG

Relationships

FromToCardinalityAs
dealvehicle*:1subject
dealparty*:* w/ rolebuyer/seller/dealerOfRecord
dealoffer1:0..1trade
dealappraisal1:0..1trade-in
dealcreditApplication1:0..1financed
dealloan1:0..1funds
deallease1:0..1leased
dealfiMenu1:0..1protected
dealescrow1:0..1escrowed
dealpayment1:0..*settled
dealdocument1:0..*papered
dealstips1:0..*gated
dealtransport1:0..*moved
dealdealJacket1:1jacket
dealdeal*:* selfdependsOn (DAG)
dealdeal*:* selfdependsOn (DAG)
ledgerdeal*:1streamed on
dealledger*:*workflow step→lifecycle event/state (steps[] carry no guard/event/state edge)

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.

Deal · Class model

Deal · State machine

Deal · Sequence


Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.