roro
The roro noun — identity, lifecycle, events, and every capability as an anchored section: 16 capabilities, 0 live, 16 sandbox, 0 declared.
roro is one of the estate's 317 automotive nouns — a job a car needs done. It carries 16 capabilities: 0 live, 16 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | roro |
| Pillar | Data (facets: 6 data · 6 services · 4 commerce) |
| Capabilities | 16 — 0 live · 16 sandbox · 0 declared |
| Entities | Transport |
| Doors | aggregator.vin |
| SDK | Vin.roro.* from apis.vin |
| Address | /catalog/roro#{action} — the anchor IS the wire name minus roro. |
Events
The vocabulary this noun can append to the record — 28 past-tense, versioned event types, each linked to the capability that emits it:
Roro.bookSpaceRequested@1— emitted bybookSpaceRoro.bunkerSurchargeRequested@1— emitted bybunkerSurchargeRoro.bunkerSurcharged@1— emitted bybunkerSurchargeRoro.completed@1— emitted bybookRoro.deliverFailed@1— emitted bydeliverRoro.deliverRequested@1— emitted bydeliverRoro.delivered@1— emitted bydeliverRoro.dischargeRequested@1— emitted bydischargeRoro.discharged@1— emitted bydischargeRoro.dispatched@1— emitted bybookRoro.etaUpdated@1— emitted byetaRoro.lashRequested@1— emitted bylashRoro.lashed@1— emitted bylashRoro.loadRequested@1— emitted byloadRoro.loaded@1— emitted byloadRoro.ordered@1— emitted bybookRoro.paid@1— emitted bypayRoro.payFailed@1— emitted bypayRoro.payRequested@1— emitted bypayRoro.quoted@1— emitted byquoteRoro.rated@1— emitted byrateRoro.settleFailed@1— emitted bysettleRoro.settleRequested@1— emitted bysettleRoro.settled@1— emitted bysettleRoro.spaceBooked@1— emitted bybookSpaceRoro.stageRequested@1— emitted bystageRoro.staged@1— emitted bystageServiceOrder.settled@1— emitted bybook
Discover & read
eta
roro.eta · GET /roros/eta · gate key · sandbox · answers RoroEta@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.etaUpdated@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.eta({"vin":"4W5KHNRL5RZ502588"})curl 'https://apis.vin/roros/eta?vin=4W5KHNRL5RZ502588'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": "RoroEta@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"eta": {
"status": "projected",
"etaDays": 9,
"etaDate": "2026-08-19"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"eta": {
"status": "projected",
"etaDays": 9,
"etaDate": "2026-08-19"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}bookingStatus
roro.bookingStatus · GET /roros/booking-status · gate none · sandbox · answers RoroBookingStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.bookingStatus({"vin":"4W5KHNRL5RZ502588"})curl 'https://apis.vin/roros/booking-status?vin=4W5KHNRL5RZ502588'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": "RoroBookingStatus@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"booking": {
"id": "RO-feaaee0e",
"status": "active",
"vessel": "VSL-c00bc810"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"booking": {
"id": "RO-feaaee0e",
"status": "active",
"vessel": "VSL-c00bc810"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}vesselTrack
roro.vesselTrack · GET /roros/vessel-track · gate none · sandbox · answers RoroVesselTrack@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.vesselTrack({"vin":"4W5KHNRL5RZ502588"})curl 'https://apis.vin/roros/vessel-track?vin=4W5KHNRL5RZ502588'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": "RoroVesselTrack@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"vessel": {
"id": "VSL-c00bc810",
"standing": "gated-in",
"milesRemaining": 0
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"vessel": {
"id": "VSL-c00bc810",
"standing": "gated-in",
"milesRemaining": 0
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
roro.quote · GET /roros/quote · gate key · sandbox · answers RoroQuote@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.quoted@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.quote({"vin":"4W5KHNRL5RZ502588"})curl 'https://apis.vin/roros/quote?vin=4W5KHNRL5RZ502588'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": "RoroQuote@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"quote": {
"id": "RQ-32b7ff31",
"rateCents": 71600,
"currency": "USD",
"status": "extended"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"quote": {
"id": "RQ-32b7ff31",
"rateCents": 71600,
"currency": "USD",
"status": "extended"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}rate
roro.rate · GET /roros/rate · gate key · sandbox · answers RoroRate@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.rated@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.rate({"vin":"4W5KHNRL5RZ502588"})curl 'https://apis.vin/roros/rate?vin=4W5KHNRL5RZ502588'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": "RoroRate@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"quote": {
"id": "RQ-32b7ff31",
"rateCents": 71600,
"currency": "USD",
"status": "tariff"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"quote": {
"id": "RQ-32b7ff31",
"rateCents": 71600,
"currency": "USD",
"status": "tariff"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
book
roro.book · POST /roros/book · gate offer · sandbox · answers RoroBook@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.completed@1 · Roro.dispatched@1 · Roro.ordered@1 · ServiceOrder.settled@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.book({"vin":"4W5KHNRL5RZ502588"})curl -X POST https://apis.vin/roros/book \
-H 'content-type: application/json' \
-d '{"vin":"4W5KHNRL5RZ502588"}'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": "RoroBook@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"booking": {
"id": "RO-feaaee0e",
"status": "booked",
"vessel": "VSL-c00bc810",
"rateCents": 71600,
"currency": "USD"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"booking": {
"id": "RO-feaaee0e",
"status": "booked",
"vessel": "VSL-c00bc810",
"rateCents": 71600,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}stage
roro.stage · POST /roros/stage · gate offer · sandbox · answers RoroStage@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.stageRequested@1 · Roro.staged@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.stage({"vin":"4W5KHNRL5RZ502588"})curl -X POST https://apis.vin/roros/stage \
-H 'content-type: application/json' \
-d '{"vin":"4W5KHNRL5RZ502588"}'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": "RoroStage@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"staging": {
"status": "staged",
"area": "R-8"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"staging": {
"status": "staged",
"area": "R-8"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}sailingSchedule
roro.sailingSchedule · GET /roros/sailing-schedule · gate none · sandbox · answers RoroSailingSchedule@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.sailingSchedule({"vin":"4W5KHNRL5RZ502588"})curl 'https://apis.vin/roros/sailing-schedule?vin=4W5KHNRL5RZ502588'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": "RoroSailingSchedule@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"schedule": {
"vessel": "VSL-c00bc810",
"nextSailingDate": "2026-08-12"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"schedule": {
"vessel": "VSL-c00bc810",
"nextSailingDate": "2026-08-12"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
roro.pay · POST /roros/pay · gate offer · sandbox · answers RoroPay@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.paid@1 · Roro.payFailed@1 · Roro.payRequested@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.pay({"vin":"4W5KHNRL5RZ502588"})curl -X POST https://apis.vin/roros/pay \
-H 'content-type: application/json' \
-d '{"vin":"4W5KHNRL5RZ502588"}'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": "RoroPay@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"payment": {
"id": "PAY-d99d227f",
"status": "settled",
"amountCents": 71600,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"payment": {
"id": "PAY-d99d227f",
"status": "settled",
"amountCents": 71600,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}settle
roro.settle · POST /roros/settle · gate offer · sandbox · answers RoroSettle@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.settleFailed@1 · Roro.settleRequested@1 · Roro.settled@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.settle({"vin":"4W5KHNRL5RZ502588"})curl -X POST https://apis.vin/roros/settle \
-H 'content-type: application/json' \
-d '{"vin":"4W5KHNRL5RZ502588"}'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": "RoroSettle@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"payment": {
"id": "PAY-ee2c3dc0",
"status": "settled",
"amountCents": 71600,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"payment": {
"id": "PAY-ee2c3dc0",
"status": "settled",
"amountCents": 71600,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}bunkerSurcharge
roro.bunkerSurcharge · POST /roros/bunker-surcharge · gate offer · sandbox · answers RoroBunkerSurcharge@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.bunkerSurchargeRequested@1 · Roro.bunkerSurcharged@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.bunkerSurcharge({"vin":"4W5KHNRL5RZ502588"})curl -X POST https://apis.vin/roros/bunker-surcharge \
-H 'content-type: application/json' \
-d '{"vin":"4W5KHNRL5RZ502588"}'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": "RoroBunkerSurcharge@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"surcharge": {
"kind": "bunker",
"pct": 12,
"amountCents": 8592,
"basisCents": 71600,
"currency": "USD"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"surcharge": {
"kind": "bunker",
"pct": 12,
"amountCents": 8592,
"basisCents": 71600,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}discharge
roro.discharge · POST /roros/discharge · gate offer · sandbox · answers RoroDischarge@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.dischargeRequested@1 · Roro.discharged@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.discharge({"vin":"4W5KHNRL5RZ502588"})curl -X POST https://apis.vin/roros/discharge \
-H 'content-type: application/json' \
-d '{"vin":"4W5KHNRL5RZ502588"}'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": "RoroDischarge@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"discharge": {
"status": "not-arrived"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"discharge": {
"status": "not-arrived"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
deliver
roro.deliver · POST /roros/deliver · gate offer · sandbox · answers RoroDeliver@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.deliverFailed@1 · Roro.deliverRequested@1 · Roro.delivered@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.deliver({"vin":"4W5KHNRL5RZ502588"})curl -X POST https://apis.vin/roros/deliver \
-H 'content-type: application/json' \
-d '{"vin":"4W5KHNRL5RZ502588"}'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": "RoroDeliver@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"delivery": {
"bookingId": "RO-feaaee0e",
"status": "delivery-pending"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"delivery": {
"bookingId": "RO-feaaee0e",
"status": "delivery-pending"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
bookSpace
roro.bookSpace · POST /roros/book-space · gate offer · sandbox · answers RoroBookSpace@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.bookSpaceRequested@1 · Roro.spaceBooked@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.bookSpace({"vin":"4W5KHNRL5RZ502588"})curl -X POST https://apis.vin/roros/book-space \
-H 'content-type: application/json' \
-d '{"vin":"4W5KHNRL5RZ502588"}'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": "RoroBookSpace@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"booking": {
"id": "RO-feaaee0e",
"status": "space-confirmed",
"vessel": "VSL-c00bc810",
"deck": "D-5"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"booking": {
"id": "RO-feaaee0e",
"status": "space-confirmed",
"vessel": "VSL-c00bc810",
"deck": "D-5"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}lash
roro.lash · POST /roros/lash · gate offer · sandbox · answers RoroLash@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.lashRequested@1 · Roro.lashed@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.lash({"vin":"4W5KHNRL5RZ502588"})curl -X POST https://apis.vin/roros/lash \
-H 'content-type: application/json' \
-d '{"vin":"4W5KHNRL5RZ502588"}'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": "RoroLash@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"stow": {
"status": "lashed",
"stowId": "ST-d1ba6766"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"stow": {
"status": "lashed",
"stowId": "ST-d1ba6766"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}load
roro.load · POST /roros/load · gate offer · sandbox · answers RoroLoad@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /4W5KHNRL5RZ502588 (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 — Roro.loadRequested@1 · Roro.loaded@1.
import { roro } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await roro.load({"vin":"4W5KHNRL5RZ502588"})curl -X POST https://apis.vin/roros/load \
-H 'content-type: application/json' \
-d '{"vin":"4W5KHNRL5RZ502588"}'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": "RoroLoad@1",
"value": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"stow": {
"status": "loaded",
"stowId": "ST-d1ba6766"
}
},
"evidence": {
"vin": "4W5KHNRL5RZ502588",
"noun": "roro",
"asOf": "2026-08-10",
"standing": "gated-in",
"stow": {
"status": "loaded",
"stowId": "ST-d1ba6766"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "long-haul-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.
Transport
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
remanPart
The remanPart noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 0 live, 14 sandbox, 0 declared.
routing
The routing noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 0 live, 14 sandbox, 0 declared.