docs.vin

inventory

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

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

Identity

Nouninventory
PillarServices (facets: 8 data · 10 services · 4 commerce)
Capabilities22 — 0 live · 22 sandbox · 0 declared
EntitiesInventoryItem
Doorsaggregator.vin · dealers.vin
SDKVin.inventory.* from apis.vin
Address/catalog/inventory#{action} — the anchor IS the wire name minus inventory.

Lifecycle

InventoryItemStockingInventoryFSM: 10 states, 9 transitions — SOURCING · BIDDING · ACQUIRED · IN_TRANSIT · RECEIVED · INSPECTED · RECONDITIONED · FRONTLINE · FLOORED · LISTED. Each transition is a past-tense event on the record.

Events

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

Discover & read

read

inventory.read · GET /inventories/read · gate none · sandbox · answers InventoryRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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:12.936Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryRead@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "inventory": {
      "stockNumber": "STK-1cb88cee",
      "inStock": true,
      "stage": "not-in-recon",
      "grade": "clean",
      "ageDays": 15,
      "askingPriceCents": 2300000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "inventory": {
      "stockNumber": "STK-1cb88cee",
      "inStock": true,
      "stage": "not-in-recon",
      "grade": "clean",
      "ageDays": 15,
      "askingPriceCents": 2300000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

decode

inventory.decode · GET /inventories/decode · gate none · sandbox · answers InventoryDecode@1

FieldTypeRequiredNotes
vinstringno

Doordealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — inventory.decode
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.decode({"vin":"5FNRL6H66TB032919"})
GET /inventories/decode
curl 'https://apis.vin/inventories/decode?vin=5FNRL6H66TB032919'

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:12.932Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryDecode@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "decoded": {
      "vin": "5FNRL6H66TB032919",
      "valid": true,
      "squishVin": "5FNRL6H66TB"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "decoded": {
      "vin": "5FNRL6H66TB032919",
      "valid": true,
      "squishVin": "5FNRL6H66TB"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

status

inventory.status · GET /inventories/status · gate none · sandbox · answers InventoryStatus@1

FieldTypeRequiredNotes
vinstringno

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

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

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:12.957Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryStatus@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "inventory": {
      "stockNumber": "STK-1cb88cee",
      "inStock": true,
      "stage": "not-in-recon",
      "grade": "clean",
      "ageDays": 15,
      "askingPriceCents": 2300000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "inventory": {
      "stockNumber": "STK-1cb88cee",
      "inStock": true,
      "stage": "not-in-recon",
      "grade": "clean",
      "ageDays": 15,
      "askingPriceCents": 2300000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

location

inventory.location · GET /inventories/location · gate none · sandbox · answers InventoryLocation@1

FieldTypeRequiredNotes
vinstringno

Doordealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — inventory.location
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.location({"vin":"5FNRL6H66TB032919"})
GET /inventories/location
curl 'https://apis.vin/inventories/location?vin=5FNRL6H66TB032919'

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:12.932Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryLocation@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "location": {
      "status": "inbound"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "location": {
      "status": "inbound"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

crossDealerLocate

inventory.crossDealerLocate · POST /inventories/cross-dealer-locate · gate key · sandbox · answers InventoryCrossDealerLocate@1

No input — this capability takes no request body.

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

EmitsInventory.crossDealerLocated@1.

the SDK — inventory.crossDealerLocate
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.crossDealerLocate()
POST /inventories/cross-dealer-locate
curl -X POST https://apis.vin/inventories/cross-dealer-locate \
  -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.883Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryCrossDealerLocate@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "NOT_IN_STOCK",
    "matches": 3,
    "nearestMiles": 187
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "NOT_IN_STOCK",
    "matches": 3,
    "nearestMiles": 187
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

batchScan

inventory.batchScan · POST /inventories/batch-scan · gate key · sandbox · answers InventoryBatchScan@1

No input — this capability takes no request body.

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

EmitsInventory.batchScanned@1.

the SDK — inventory.batchScan
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.batchScan()
POST /inventories/batch-scan
curl -X POST https://apis.vin/inventories/batch-scan \
  -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.883Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryBatchScan@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "NOT_IN_STOCK",
    "results": [
      {
        "vin": "1HGCM82633A004352",
        "inStock": false,
        "position": "NOT_IN_STOCK"
      }
    ]
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "NOT_IN_STOCK",
    "results": [
      {
        "vin": "1HGCM82633A004352",
        "inStock": false,
        "position": "NOT_IN_STOCK"
      }
    ]
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

value

inventory.value · GET /inventories/value · gate key · sandbox · answers InventoryValue@1

FieldTypeRequiredNotes
vinstringno

Doordealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — inventory.value
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.value({"vin":"5FNRL6H66TB032919"})
GET /inventories/value
curl 'https://apis.vin/inventories/value?vin=5FNRL6H66TB032919'

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:12.973Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryValue@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "value": {
      "amountCents": 2300000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "value": {
      "amountCents": 2300000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

reprice

inventory.reprice · POST /inventories/reprice · gate offer · sandbox · answers InventoryReprice@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.

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

EmitsInventory.failed@1 · Inventory.repriced@1.

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

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

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:12.949Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryReprice@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "reprice": {
      "status": "refused",
      "reason": "not-listed"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "reprice": {
      "status": "refused",
      "reason": "not-listed"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

turnRate

inventory.turnRate · GET /inventories/turn-rate · gate key · sandbox · answers InventoryTurnRate@1

FieldTypeRequiredNotes
vinstringno

Doordealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — inventory.turnRate
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.turnRate({"vin":"5FNRL6H66TB032919"})
GET /inventories/turn-rate
curl 'https://apis.vin/inventories/turn-rate?vin=5FNRL6H66TB032919'

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:12.973Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryTurnRate@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "turnDays": 40,
    "targetDays": 45
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "turnDays": 40,
    "targetDays": 45
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

stage

inventory.stage · POST /inventories/stage · gate offer · sandbox · answers InventoryStage@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.

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

EmitsInventory.staged@1.

the SDK — inventory.stage
import { inventory } from 'apis.vin'

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

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:12.950Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryStage@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stage": "not-in-recon",
    "inStock": true
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stage": "not-in-recon",
    "inStock": true
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

acquire

inventory.acquire · POST /inventories/acquire · gate offer · sandbox · answers InventoryAcquire@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.

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

EmitsInventory.acquired@1.

the SDK — inventory.acquire
import { inventory } from 'apis.vin'

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

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:12.914Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryAcquire@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "acquisition": {
      "id": "ACQ-cd552254",
      "status": "already-in-stock",
      "costCents": 1850000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "acquisition": {
      "id": "ACQ-cd552254",
      "status": "already-in-stock",
      "costCents": 1850000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

age

inventory.age · GET /inventories/age · gate key · sandbox · answers InventoryAge@1

FieldTypeRequiredNotes
vinstringno

Doordealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — inventory.age
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.age({"vin":"5FNRL6H66TB032919"})
GET /inventories/age
curl 'https://apis.vin/inventories/age?vin=5FNRL6H66TB032919'

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:12.922Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryAge@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "ageDays": 15
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "ageDays": 15
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

assignStockNumber

inventory.assignStockNumber · POST /inventories/assign-stock-number · gate offer · sandbox · answers InventoryAssignStockNumber@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.

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

EmitsInventory.stockNumberAssigned@1.

the SDK — inventory.assignStockNumber
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.assignStockNumber({"vin":"5FNRL6H66TB032919"})
POST /inventories/assign-stock-number
curl -X POST https://apis.vin/inventories/assign-stock-number \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL6H66TB032919"}'

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:12.922Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryAssignStockNumber@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "assignment": {
      "stockNumber": "STK-1cb88cee",
      "status": "assigned"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "assignment": {
      "stockNumber": "STK-1cb88cee",
      "status": "assigned"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

cost

inventory.cost · GET /inventories/cost · gate key · sandbox · answers InventoryCost@1

FieldTypeRequiredNotes
vinstringno

Doordealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — inventory.cost
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.cost({"vin":"5FNRL6H66TB032919"})
GET /inventories/cost
curl 'https://apis.vin/inventories/cost?vin=5FNRL6H66TB032919'

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:12.922Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryCost@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "cost": {
      "amountCents": 1850000,
      "currency": "USD",
      "basis": "grade-banded"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "cost": {
      "amountCents": 1850000,
      "currency": "USD",
      "basis": "grade-banded"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

costIn

inventory.costIn · POST /inventories/cost-in · gate offer · sandbox · answers InventoryCostIn@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.

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

EmitsInventory.costedIn@1 · Inventory.failed@1.

the SDK — inventory.costIn
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.costIn({"vin":"5FNRL6H66TB032919"})
POST /inventories/cost-in
curl -X POST https://apis.vin/inventories/cost-in \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL6H66TB032919"}'

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:12.924Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryCostIn@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "cost": {
      "amountCents": 1850000,
      "currency": "USD",
      "basis": "grade-banded"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "cost": {
      "amountCents": 1850000,
      "currency": "USD",
      "basis": "grade-banded"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

floorplan

inventory.floorplan · POST /inventories/floorplan · gate offer · sandbox · answers InventoryFloorplan@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.

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

EmitsInventory.failed@1 · Inventory.floorplanned@1.

the SDK — inventory.floorplan
import { inventory } from 'apis.vin'

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

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:12.932Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryFloorplan@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "floorplan": {
      "floored": false,
      "principalCents": 0,
      "perDiemCents": 0,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "floorplan": {
      "floored": false,
      "principalCents": 0,
      "perDiemCents": 0,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

frontline

inventory.frontline · POST /inventories/frontline · gate offer · sandbox · answers InventoryFrontline@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.

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

EmitsInventory.frontlined@1.

the SDK — inventory.frontline
import { inventory } from 'apis.vin'

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

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:12.932Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryFrontline@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "frontline": {
      "status": "refused",
      "reason": "recon-incomplete"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "frontline": {
      "status": "refused",
      "reason": "recon-incomplete"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

move

inventory.move · POST /inventories/move · gate offer · sandbox · answers InventoryMove@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.

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

EmitsInventory.moved@1.

the SDK — inventory.move
import { inventory } from 'apis.vin'

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

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:12.932Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryMove@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "move": {
      "status": "not-on-lot"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "move": {
      "status": "not-on-lot"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

post

inventory.post · POST /inventories/post · gate key · sandbox · answers Listing@1

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

FieldTypeRequiredNotes
vinstringyes
pricestringyesdecimal
stockNumberstringno
otdobjectno
photosarrayno

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

EmitsListing.delisted@1 · Listing.listed@1 · Listing.repriced@1 · OTD.posted@1.

the SDK — inventory.post
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.post({"vin":"5FNRL6H66TB032919","price":"price"})
POST /inventories/post
curl -X POST https://apis.vin/inventories/post \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL6H66TB032919","price":"price"}'

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:12.932Z · HTTP 200
{
  "type": "OK",
  "answers": "Listing@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "post": {
      "status": "refused",
      "reason": "not-frontline"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "post": {
      "status": "refused",
      "reason": "not-frontline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": true
  }
}

stockIn

inventory.stockIn · POST /inventories/stock-in · gate offer · sandbox · answers InventoryStockIn@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.

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

EmitsInventory.stockedIn@1.

the SDK — inventory.stockIn
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.stockIn({"vin":"5FNRL6H66TB032919"})
POST /inventories/stock-in
curl -X POST https://apis.vin/inventories/stock-in \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL6H66TB032919"}'

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:12.963Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryStockIn@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "acquisition": {
      "id": "ACQ-4406b8d1",
      "status": "already-in-stock",
      "costCents": 1850000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "acquisition": {
      "id": "ACQ-4406b8d1",
      "status": "already-in-stock",
      "costCents": 1850000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

stockOut

inventory.stockOut · POST /inventories/stock-out · gate offer · sandbox · answers InventoryStockOut@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.

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

EmitsInventory.stockedOut@1.

the SDK — inventory.stockOut
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.stockOut({"vin":"5FNRL6H66TB032919"})
POST /inventories/stock-out
curl -X POST https://apis.vin/inventories/stock-out \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL6H66TB032919"}'

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:12.963Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryStockOut@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "stockOut": {
      "status": "stocked-out",
      "channel": "retail-sale"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "stockOut": {
      "status": "stocked-out",
      "channel": "retail-sale"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

writeOff

inventory.writeOff · POST /inventories/write-off · gate offer · sandbox · answers InventoryWriteOff@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.

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

EmitsInventory.writtenOff@1.

the SDK — inventory.writeOff
import { inventory } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.writeOff({"vin":"5FNRL6H66TB032919"})
POST /inventories/write-off
curl -X POST https://apis.vin/inventories/write-off \
  -H 'content-type: application/json' \
  -d '{"vin":"5FNRL6H66TB032919"}'

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:12.973Z · HTTP 200
{
  "type": "OK",
  "answers": "InventoryWriteOff@1",
  "value": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "writeOff": {
      "status": "no-grounds",
      "amountCents": 0,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "5FNRL6H66TB032919",
    "noun": "inventory",
    "asOf": "2026-08-10",
    "position": "IN_TRANSIT",
    "stockNumber": "STK-1cb88cee",
    "writeOff": {
      "status": "no-grounds",
      "amountCents": 0,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "ownership-upkeep-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.

InventoryItem

Schema

PropertyTypeNotes
vinstring
rooftopIdref→Rooftop
stockNumberstring
statusenumfrontlined|recon|wholesale

Relationships

FromToCardinalityAs
vehicleinventory1:0..1stocked
inventoryfloorplan1:0..1floored
nullinventory1:0..*stocks

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