tow
The tow noun — identity, lifecycle, events, and every capability as an anchored section: 21 capabilities, 0 live, 21 sandbox, 0 declared.
tow is one of the estate's 317 automotive nouns — a job a car needs done. It carries 21 capabilities: 0 live, 21 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | tow |
| Pillar | Services (facets: 6 data · 10 services · 5 commerce) |
| Capabilities | 21 — 0 live · 21 sandbox · 0 declared |
| Entities | Tow |
| Doors | aggregator.vin |
| SDK | Vin.tow.* from apis.vin |
| Address | /catalog/tow#{action} — the anchor IS the wire name minus tow. |
Lifecycle
Tow — TowFSM: 8 states, 8 transitions — Requested · Dispatched · Hooked · Delivered · Impounded · Released · Invoiced · Paid. Each transition is a past-tense event on the record.
Events
The vocabulary this noun can append to the record — 43 past-tense, versioned event types, each linked to the capability that emits it:
ServiceOrder.settled@1— emitted byorderTow.claimFailed@1— emitted byclaimTow.claimRequested@1— emitted byclaimTow.claimed@1— emitted byclaimTow.completed@1— emitted byorderTow.deliverFailed@1— emitted bydeliverTow.deliverRequested@1— emitted bydeliverTow.delivered@1— emitted bydeliverTow.dispatchFailed@1— emitted bydispatchTow.dispatchRequested@1— emitted bydispatchTow.dispatched@1— emitted bydispatch·orderTow.etaUpdated@1— emitted byetaTow.flatbedLoaded@1— emitted byflatbedTow.flatbedRequested@1— emitted byflatbedTow.hookFailed@1— emitted byhookTow.hookRequested@1— emitted byhookTow.hooked@1— emitted byhookTow.impoundRequested@1— emitted byimpoundTow.impounded@1— emitted byimpoundTow.invoiceFailed@1— emitted byinvoiceTow.invoiceRequested@1— emitted byinvoiceTow.invoiced@1— emitted byinvoiceTow.ordered@1— emitted byorderTow.paid@1— emitted bypayTow.payFailed@1— emitted bypayTow.payRequested@1— emitted bypayTow.quoted@1— emitted byquoteTow.recoverFailed@1— emitted byrecoverTow.recoverRequested@1— emitted byrecoverTow.recovered@1— emitted byrecoverTow.reimburseRequested@1— emitted byreimburseTow.reimbursed@1— emitted byreimburseTow.releaseFailed@1— emitted byreleaseTow.releaseRequested@1— emitted byreleaseTow.released@1— emitted byreleaseTow.requestRequested@1— emitted byrequestTow.requested@1— emitted byrequestTow.typeDecoded@1— emitted bytypeDecodeTow.wheelLiftRequested@1— emitted bywheelLiftTow.wheelLifted@1— emitted bywheelLiftTow.winchFailed@1— emitted bywinchTow.winchRequested@1— emitted bywinchTow.winched@1— emitted bywinch
Discover & read
history
tow.history · GET /tows/history · gate none · sandbox · answers TowHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1FTFW1RJ5SFA57725 (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 { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.history({"vin":"1FTFW1RJ5SFA57725"})curl 'https://apis.vin/tows/history?vin=1FTFW1RJ5SFA57725'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": "TowHistory@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"events": []
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"events": []
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}status
tow.status · GET /tows/status · gate none · sandbox · answers TowStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1FTFW1RJ5SFA57725 (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 { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.status({"vin":"1FTFW1RJ5SFA57725"})curl 'https://apis.vin/tows/status?vin=1FTFW1RJ5SFA57725'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": "TowStatus@1",
"value": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"bookingNumber": "TR-1",
"status": "EnRoute",
"step": "in_transit",
"bizStep": "transporting"
},
"evidence": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"bookingNumber": "TR-1",
"status": "EnRoute",
"step": "in_transit",
"bizStep": "transporting"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "transport-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}locate
tow.locate · GET /tows/locate · gate none · sandbox · answers TowLocate@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1FTFW1RJ5SFA57725 (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 { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.locate({"vin":"1FTFW1RJ5SFA57725"})curl 'https://apis.vin/tows/locate?vin=1FTFW1RJ5SFA57725'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": "TowLocate@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"location": {
"site": "with-owner",
"method": "telematics"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"location": {
"site": "with-owner",
"method": "telematics"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}eta
tow.eta · GET /tows/eta · gate key · sandbox · answers TowEta@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1FTFW1RJ5SFA57725 (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 — Tow.etaUpdated@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.eta({"vin":"1FTFW1RJ5SFA57725"})curl 'https://apis.vin/tows/eta?vin=1FTFW1RJ5SFA57725'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": "TowEta@1",
"value": {
"serviceType": "tow",
"etaMinDays": 1,
"etaMaxDays": 1,
"rush": false,
"distanceMiles": 32
},
"evidence": {
"serviceType": "tow",
"etaMinDays": 1,
"etaMaxDays": 1,
"rush": false,
"distanceMiles": 32
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "transport-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}typeDecode
tow.typeDecode · GET /tows/type-decode · gate key · sandbox · answers TowTypeDecode@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1FTFW1RJ5SFA57725 (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 — Tow.typeDecoded@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.typeDecode({"vin":"1FTFW1RJ5SFA57725"})curl 'https://apis.vin/tows/type-decode?vin=1FTFW1RJ5SFA57725'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": "TowTypeDecode@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"decode": {
"equipment": "wheel-lift",
"basis": "wear-verdicts"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"decode": {
"equipment": "wheel-lift",
"basis": "wear-verdicts"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
tow.quote · GET /tows/quote · gate key · sandbox · answers TowQuote@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1FTFW1RJ5SFA57725 (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 — Tow.quoted@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.quote({"vin":"1FTFW1RJ5SFA57725"})curl 'https://apis.vin/tows/quote?vin=1FTFW1RJ5SFA57725'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": "TowQuote@1",
"value": {
"quoteId": "TQ-1",
"serviceType": "tow",
"priceCents": 28485,
"costCents": 21100,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 1,
"distanceMiles": 32,
"expires": "2026-08-17T00:00:00.000Z"
},
"evidence": {
"quoteId": "TQ-1",
"serviceType": "tow",
"priceCents": 28485,
"costCents": 21100,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 1,
"distanceMiles": 32,
"expires": "2026-08-17T00:00:00.000Z"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "transport-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
request
tow.request · POST /tows/request · gate offer · sandbox · answers TowRequest@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) · /1FTFW1RJ5SFA57725 (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 — Tow.requestRequested@1 · Tow.requested@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.request({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/request \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowRequest@1",
"value": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"bookingNumber": "TR-1",
"requested": true,
"serviceType": "tow",
"priceCents": 28485,
"currency": "USD",
"etaMaxDays": 1,
"status": "Active"
},
"evidence": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"bookingNumber": "TR-1",
"requested": true,
"serviceType": "tow",
"priceCents": 28485,
"currency": "USD",
"etaMaxDays": 1,
"status": "Active"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "transport-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}order
tow.order · POST /tows/order · gate offer · sandbox · answers TowOrder@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) · /1FTFW1RJ5SFA57725 (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 — ServiceOrder.settled@1 · Tow.completed@1 · Tow.dispatched@1 · Tow.ordered@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.order({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/order \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowOrder@1",
"value": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"bookingNumber": "TR-1",
"ordered": true,
"serviceType": "tow",
"priceCents": 28485,
"currency": "USD",
"etaMaxDays": 1,
"expires": "2026-08-17T00:00:00.000Z",
"status": "Active"
},
"evidence": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"bookingNumber": "TR-1",
"ordered": true,
"serviceType": "tow",
"priceCents": 28485,
"currency": "USD",
"etaMaxDays": 1,
"expires": "2026-08-17T00:00:00.000Z",
"status": "Active"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "transport-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}dispatch
tow.dispatch · POST /tows/dispatch · gate offer · sandbox · answers TowDispatch@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) · /1FTFW1RJ5SFA57725 (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 — Tow.dispatchFailed@1 · Tow.dispatchRequested@1 · Tow.dispatched@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.dispatch({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/dispatch \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowDispatch@1",
"value": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"bookingNumber": "TR-1",
"dispatched": true,
"step": "dispatched",
"status": "Dispatched"
},
"evidence": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"bookingNumber": "TR-1",
"dispatched": true,
"step": "dispatched",
"status": "Dispatched"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "transport-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
tow.pay · POST /tows/pay · gate offer · sandbox · answers TowPay@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) · /1FTFW1RJ5SFA57725 (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 — Tow.paid@1 · Tow.payFailed@1 · Tow.payRequested@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.pay({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/pay \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowPay@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"payment": {
"status": "no-tow-open"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"payment": {
"status": "no-tow-open"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}invoice
tow.invoice · POST /tows/invoice · gate offer · sandbox · answers TowInvoice@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) · /1FTFW1RJ5SFA57725 (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 — Tow.invoiceFailed@1 · Tow.invoiceRequested@1 · Tow.invoiced@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.invoice({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/invoice \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowInvoice@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"invoice": {
"status": "no-tow-open"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"invoice": {
"status": "no-tow-open"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}reimburse
tow.reimburse · POST /tows/reimburse · gate offer · sandbox · answers TowReimburse@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) · /1FTFW1RJ5SFA57725 (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 — Tow.reimburseRequested@1 · Tow.reimbursed@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.reimburse({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/reimburse \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowReimburse@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"reimbursement": {
"status": "no-claim-on-file"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"reimbursement": {
"status": "no-claim-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
deliver
tow.deliver · POST /tows/deliver · gate offer · sandbox · answers TowDeliver@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) · /1FTFW1RJ5SFA57725 (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 — Tow.deliverFailed@1 · Tow.deliverRequested@1 · Tow.delivered@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.deliver({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/deliver \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowDeliver@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"delivery": {
"status": "no-tow-open"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"delivery": {
"status": "no-tow-open"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Authorize & resolve
claim
tow.claim · POST /tows/claim · gate offer · sandbox · answers TowClaim@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) · /1FTFW1RJ5SFA57725 (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 — Tow.claimFailed@1 · Tow.claimRequested@1 · Tow.claimed@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.claim({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/claim \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowClaim@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"claim": {
"id": "CLM-744f733f",
"status": "claim-filed"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"claim": {
"id": "CLM-744f733f",
"status": "claim-filed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Lifecycle & state
release
tow.release · POST /tows/release · gate offer · sandbox · answers TowRelease@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) · /1FTFW1RJ5SFA57725 (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 — Tow.releaseFailed@1 · Tow.releaseRequested@1 · Tow.released@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.release({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/release \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowRelease@1",
"value": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"bookingNumber": "TR-1",
"released": true,
"status": "Complete",
"releaseRef": "rel:serviceorder_EMVh3MmY1dFQ"
},
"evidence": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"bookingNumber": "TR-1",
"released": true,
"status": "Complete",
"releaseRef": "rel:serviceorder_EMVh3MmY1dFQ"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "transport-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
flatbed
tow.flatbed · POST /tows/flatbed · gate offer · sandbox · answers TowFlatbed@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) · /1FTFW1RJ5SFA57725 (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 — Tow.flatbedRequested@1 · Tow.flatbedLoaded@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.flatbed({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/flatbed \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowFlatbed@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"assignment": {
"status": "assigned",
"equipment": "flatbed",
"required": false
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"assignment": {
"status": "assigned",
"equipment": "flatbed",
"required": false
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}hook
tow.hook · POST /tows/hook · gate offer · sandbox · answers TowHook@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) · /1FTFW1RJ5SFA57725 (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 — Tow.hookFailed@1 · Tow.hookRequested@1 · Tow.hooked@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.hook({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/hook \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowHook@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"hook": {
"status": "no-tow-open"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"hook": {
"status": "no-tow-open"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}impound
tow.impound · POST /tows/impound · gate offer · sandbox · answers TowImpound@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) · /1FTFW1RJ5SFA57725 (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 — Tow.impoundRequested@1 · Tow.impounded@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.impound({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/impound \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowImpound@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"impounding": {
"status": "no-tow-open"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"impounding": {
"status": "no-tow-open"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}recover
tow.recover · POST /tows/recover · gate offer · sandbox · answers TowRecover@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) · /1FTFW1RJ5SFA57725 (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 — Tow.recoverFailed@1 · Tow.recoverRequested@1 · Tow.recovered@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.recover({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/recover \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowRecover@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"recovery": {
"status": "nothing-to-recover"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"recovery": {
"status": "nothing-to-recover"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}wheelLift
tow.wheelLift · POST /tows/wheel-lift · gate offer · sandbox · answers TowWheelLift@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) · /1FTFW1RJ5SFA57725 (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 — Tow.wheelLiftRequested@1 · Tow.wheelLifted@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.wheelLift({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/wheel-lift \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowWheelLift@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"assignment": {
"status": "assigned",
"equipment": "wheel-lift",
"required": false
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"assignment": {
"status": "assigned",
"equipment": "wheel-lift",
"required": false
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}winch
tow.winch · POST /tows/winch · gate offer · sandbox · answers TowWinch@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) · /1FTFW1RJ5SFA57725 (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 — Tow.winchFailed@1 · Tow.winchRequested@1 · Tow.winched@1.
import { tow } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await tow.winch({"vin":"1FTFW1RJ5SFA57725"})curl -X POST https://apis.vin/tows/winch \
-H 'content-type: application/json' \
-d '{"vin":"1FTFW1RJ5SFA57725"}'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": "TowWinch@1",
"value": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"service": {
"status": "recovered"
}
},
"evidence": {
"vin": "1FTFW1RJ5SFA57725",
"noun": "tow",
"asOf": "2026-08-10",
"service": {
"status": "recovered"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "auction-aftermath-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.
Tow
Schema
| Property | Type | Notes |
|---|---|---|
id | id | tow_ |
vin | string | — |
origin | string | — |
destination | string | — |
carrierId | ref→Carrier | — |
status | TowFSM | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
tow | vehicle | *:1 | moves |
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
totalLoss
The totalLoss noun — identity, lifecycle, events, and every capability as an anchored section: 10 capabilities, 0 live, 10 sandbox, 0 declared.
translation
The translation noun — identity, lifecycle, events, and every capability as an anchored section: 3 capabilities, 0 live, 3 sandbox, 0 declared.