storage
The storage noun — identity, lifecycle, events, and every capability as an anchored section: 18 capabilities, 0 live, 18 sandbox, 0 declared.
storage is one of the estate's 317 automotive nouns — a job a car needs done. It carries 18 capabilities: 0 live, 18 sandbox, 0 declared · doors storage.vin · payments.vin.
Identity
| Noun | storage |
| Pillar | Data (facets: 6 data · 6 services · 6 commerce) |
| Capabilities | 18 — 0 live · 18 sandbox · 0 declared |
| Entities | ServiceOrder |
| Doors | payments.vin · storage.vin |
| SDK | Vin.storage.* from apis.vin |
| Address | /catalog/storage#{action} — the anchor IS the wire name minus storage. |
Events
The vocabulary this noun can append to the record — 31 past-tense, versioned event types, each linked to the capability that emits it:
Order.placed@1— emitted bypayServiceOrder.settled@1— emitted bypayStorage.billRequested@1— emitted bybillStorage.billed@1— emitted bybillStorage.charged@1— emitted bypayStorage.demurrageAssessed@1— emitted bydemurrageStorage.demurrageRequested@1— emitted bydemurrageStorage.moveRequested@1— emitted bymoveStorage.moved@1— emitted bymoveStorage.paid@1— emitted bypayStorage.payFailed@1— emitted bypayStorage.payRequested@1— emitted bypayStorage.quoteRequested@1— emitted byquoteStorage.quoted@1— emitted byquoteStorage.rated@1— emitted byrateStorage.receiveRequested@1— emitted byreceiveStorage.received@1— emitted byreceiveStorage.releaseFailed@1— emitted byreleaseStorage.releaseRequested@1— emitted byreleaseStorage.released@1— emitted byreleaseStorage.reserveRequested@1— emitted byreserveStorage.reserved@1— emitted byreserveStorage.retrieveRequested@1— emitted byretrieveStorage.retrieved@1— emitted byretrieveStorage.scheduleRequested@1— emitted byscheduleStorage.scheduled@1— emitted byscheduleStorage.settleFailed@1— emitted bysettleStorage.settleRequested@1— emitted bysettleStorage.settled@1— emitted bysettleStorage.stageRequested@1— emitted bystageStorage.staged@1— emitted bystage
Discover & read
history
storage.history · GET /storages/history · gate none · sandbox · answers StorageHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.history({"vin":"1N6ED1EK3PN658772"})curl 'https://apis.vin/storages/history?vin=1N6ED1EK3PN658772'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageHistory@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"events": []
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"events": []
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}status
storage.status · GET /storages/status · gate none · sandbox · answers StorageStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.status({"vin":"1N6ED1EK3PN658772"})curl 'https://apis.vin/storages/status?vin=1N6ED1EK3PN658772'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageStatus@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"storage": {
"status": "nothing-stored",
"site": "inbound"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"storage": {
"status": "nothing-stored",
"site": "inbound"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}availability
storage.availability · GET /storages/availability · gate key · sandbox · answers StorageAvailability@1
| Field | Type | Required | Notes |
|---|---|---|---|
product | string | yes | one of storage, parking, tolls |
location | object | no | — |
period | string | no | — |
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.availability({"product":"storage"})curl 'https://apis.vin/storages/availability?product=storage'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageAvailability@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "storage",
"asOf": "2026-08-10",
"availability": {
"capacity": 220,
"occupied": 23,
"available": 197
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "storage",
"asOf": "2026-08-10",
"availability": {
"capacity": 220,
"occupied": 23,
"available": 197
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}location
storage.location · GET /storages/location · gate none · sandbox · answers StorageLocation@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.location({"vin":"1N6ED1EK3PN658772"})curl 'https://apis.vin/storages/location?vin=1N6ED1EK3PN658772'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageLocation@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"location": {
"status": "inbound"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"location": {
"status": "inbound"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
storage.quote · POST /storages/quote · gate offer · sandbox · answers StorageQuote@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.quoteRequested@1 · Storage.quoted@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.quote({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/quote \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageQuote@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"quoteId": "DQ-1",
"serviceType": "repair",
"costCents": 40813,
"priceCents": 53057,
"marginCents": 12244,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 5,
"rush": false,
"expires": "2026-08-17T00:00:00.000Z"
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"quoteId": "DQ-1",
"serviceType": "repair",
"costCents": 40813,
"priceCents": 53057,
"marginCents": 12244,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 5,
"rush": false,
"expires": "2026-08-17T00:00:00.000Z"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}rate
storage.rate · GET /storages/rate · gate key · sandbox · answers StorageRate@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.rated@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.rate({"vin":"1N6ED1EK3PN658772"})curl 'https://apis.vin/storages/rate?vin=1N6ED1EK3PN658772'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageRate@1",
"value": {
"locationZip": "90001",
"indoor": false,
"dailyRateCents": 3366,
"monthlyRateCents": 87516,
"currency": "USD"
},
"evidence": {
"locationZip": "90001",
"indoor": false,
"dailyRateCents": 3366,
"monthlyRateCents": 87516,
"currency": "USD"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "services-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
schedule
storage.schedule · POST /storages/schedule · gate offer · sandbox · answers StorageSchedule@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.scheduleRequested@1 · Storage.scheduled@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.schedule({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/schedule \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageSchedule@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"appointment": {
"id": "SA-9c139fdc",
"date": "2026-08-12",
"space": "SP-137",
"status": "scheduled"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"appointment": {
"id": "SA-9c139fdc",
"date": "2026-08-12",
"space": "SP-137",
"status": "scheduled"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}reserve
storage.reserve · POST /storages/reserve · gate offer · sandbox · answers StorageReserve@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.reserveRequested@1 · Storage.reserved@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.reserve({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/reserve \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageReserve@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"reservation": {
"id": "SR-bc5575fb",
"date": "2026-08-12",
"space": "SP-137",
"status": "reserved"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"reservation": {
"id": "SR-bc5575fb",
"date": "2026-08-12",
"space": "SP-137",
"status": "reserved"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}stage
storage.stage · POST /storages/stage · gate offer · sandbox · answers StorageStage@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.stageRequested@1 · Storage.staged@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.stage({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/stage \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageStage@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"stage": {
"site": "inbound",
"reconStage": "intake"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"stage": {
"site": "inbound",
"reconStage": "intake"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
storage.pay · POST /storages/pay · gate offer · sandbox · answers StoragePayment@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
product | string | yes | one of storage, parking, tolls |
subject | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Delegated calls require a typed Mandate — { ceiling, perAction, expires, tripwires }; the ceiling is a field, not a conversation.
Door — payments.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Order.placed@1 · ServiceOrder.settled@1 · Storage.charged@1 · Storage.paid@1 · Storage.payFailed@1 · Storage.payRequested@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.pay({"vin":"1N6ED1EK3PN658772","product":"storage"})curl -X POST https://apis.vin/storages/pay \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772","product":"storage"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StoragePayment@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"payment": {
"status": "nothing-stored"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"payment": {
"status": "nothing-stored"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}bill
storage.bill · POST /storages/bill · gate offer · sandbox · answers StorageBill@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.billRequested@1 · Storage.billed@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.bill({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/bill \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageBill@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"bill": {
"status": "nothing-stored"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"bill": {
"status": "nothing-stored"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}settle
storage.settle · POST /storages/settle · gate offer · sandbox · answers StorageSettle@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.settleFailed@1 · Storage.settleRequested@1 · Storage.settled@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.settle({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/settle \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageSettle@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"payment": {
"status": "nothing-stored"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"payment": {
"status": "nothing-stored"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Lifecycle & state
release
storage.release · POST /storages/release · gate offer · sandbox · answers StorageRelease@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.releaseFailed@1 · Storage.releaseRequested@1 · Storage.released@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.release({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/release \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageRelease@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"release": {
"status": "nothing-stored"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"release": {
"status": "nothing-stored"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
days
storage.days · GET /storages/days · gate none · sandbox · answers StorageDays@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.days({"vin":"1N6ED1EK3PN658772"})curl 'https://apis.vin/storages/days?vin=1N6ED1EK3PN658772'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageDays@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"days": {
"days": 5,
"freeDays": 7,
"billableDays": 0
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"days": {
"days": 5,
"freeDays": 7,
"billableDays": 0
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}demurrage
storage.demurrage · POST /storages/demurrage · gate offer · sandbox · answers StorageDemurrage@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.demurrageRequested@1 · Storage.demurrageAssessed@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.demurrage({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/demurrage \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageDemurrage@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"demurrage": {
"status": "nothing-stored"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"demurrage": {
"status": "nothing-stored"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}move
storage.move · POST /storages/move · gate offer · sandbox · answers StorageMove@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.moveRequested@1 · Storage.moved@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.move({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/move \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageMove@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"move": {
"status": "nothing-stored"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"move": {
"status": "nothing-stored"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}receive
storage.receive · POST /storages/receive · gate offer · sandbox · answers StorageReceive@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.receiveRequested@1 · Storage.received@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.receive({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/receive \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageReceive@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"receipt": {
"status": "received",
"id": "STG-23b6fecb"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"receipt": {
"status": "received",
"id": "STG-23b6fecb"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}retrieve
storage.retrieve · POST /storages/retrieve · gate offer · sandbox · answers StorageRetrieve@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — storage.vin serves this noun on its two routes: / (the landing) · /1N6ED1EK3PN658772 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Storage.retrieveRequested@1 · Storage.retrieved@1.
import { storage } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await storage.retrieve({"vin":"1N6ED1EK3PN658772"})curl -X POST https://apis.vin/storages/retrieve \
-H 'content-type: application/json' \
-d '{"vin":"1N6ED1EK3PN658772"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "StorageRetrieve@1",
"value": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"release": {
"status": "nothing-stored"
}
},
"evidence": {
"vin": "1N6ED1EK3PN658772",
"noun": "storage",
"asOf": "2026-08-10",
"release": {
"status": "nothing-stored"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "yard-iron-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.
ServiceOrder
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 4 diagrams, rendered from the estate model.
Storage · Class model
Storage · State machine
Storage · State machine
Storage · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
steering
The steering noun — identity, lifecycle, events, and every capability as an anchored section: 24 capabilities, 0 live, 24 sandbox, 0 declared.
suspension
The suspension noun — identity, lifecycle, events, and every capability as an anchored section: 26 capabilities, 2 live, 24 sandbox, 0 declared.