docs.vin

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

Nountow
PillarServices (facets: 6 data · 10 services · 5 commerce)
Capabilities21 — 0 live · 21 sandbox · 0 declared
EntitiesTow
Doorsaggregator.vin
SDKVin.tow.* from apis.vin
Address/catalog/tow#{action} — the anchor IS the wire name minus tow.

Lifecycle

TowTowFSM: 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:

Discover & read

history

tow.history · GET /tows/history · gate none · sandbox · answers TowHistory@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

the SDK — tow.history
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"})
GET /tows/history
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.

receipt · executed 2026-08-17T12:42:18.399Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

the SDK — tow.status
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"})
GET /tows/status
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.

receipt · executed 2026-08-17T12:42:18.441Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

the SDK — tow.locate
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"})
GET /tows/locate
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.

receipt · executed 2026-08-17T12:42:18.405Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

EmitsTow.etaUpdated@1.

the SDK — tow.eta
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"})
GET /tows/eta
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.

receipt · executed 2026-08-17T12:42:18.399Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

EmitsTow.typeDecoded@1.

the SDK — tow.typeDecode
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"})
GET /tows/type-decode
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.

receipt · executed 2026-08-17T12:42:18.441Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

EmitsTow.quoted@1.

the SDK — tow.quote
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"})
GET /tows/quote
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.

receipt · executed 2026-08-17T12:42:18.438Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.requestRequested@1 · Tow.requested@1.

the SDK — tow.request
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"})
POST /tows/request
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.

receipt · executed 2026-08-17T12:42:18.441Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsServiceOrder.settled@1 · Tow.completed@1 · Tow.dispatched@1 · Tow.ordered@1.

the SDK — tow.order
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"})
POST /tows/order
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.

receipt · executed 2026-08-17T12:42:18.405Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.dispatchFailed@1 · Tow.dispatchRequested@1 · Tow.dispatched@1.

the SDK — tow.dispatch
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"})
POST /tows/dispatch
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.

receipt · executed 2026-08-17T12:42:18.393Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.paid@1 · Tow.payFailed@1 · Tow.payRequested@1.

the SDK — tow.pay
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"})
POST /tows/pay
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.

receipt · executed 2026-08-17T12:42:18.421Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.invoiceFailed@1 · Tow.invoiceRequested@1 · Tow.invoiced@1.

the SDK — tow.invoice
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"})
POST /tows/invoice
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.

receipt · executed 2026-08-17T12:42:18.404Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.reimburseRequested@1 · Tow.reimbursed@1.

the SDK — tow.reimburse
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"})
POST /tows/reimburse
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.

receipt · executed 2026-08-17T12:42:18.439Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.deliverFailed@1 · Tow.deliverRequested@1 · Tow.delivered@1.

the SDK — tow.deliver
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"})
POST /tows/deliver
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.

receipt · executed 2026-08-17T12:42:18.392Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.claimFailed@1 · Tow.claimRequested@1 · Tow.claimed@1.

the SDK — tow.claim
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"})
POST /tows/claim
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.

receipt · executed 2026-08-17T12:42:18.391Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.releaseFailed@1 · Tow.releaseRequested@1 · Tow.released@1.

the SDK — tow.release
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"})
POST /tows/release
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.

receipt · executed 2026-08-17T12:42:18.441Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.flatbedRequested@1 · Tow.flatbedLoaded@1.

the SDK — tow.flatbed
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"})
POST /tows/flatbed
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.

receipt · executed 2026-08-17T12:42:18.399Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.hookFailed@1 · Tow.hookRequested@1 · Tow.hooked@1.

the SDK — tow.hook
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"})
POST /tows/hook
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.

receipt · executed 2026-08-17T12:42:18.399Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.impoundRequested@1 · Tow.impounded@1.

the SDK — tow.impound
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"})
POST /tows/impound
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.

receipt · executed 2026-08-17T12:42:18.404Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.recoverFailed@1 · Tow.recoverRequested@1 · Tow.recovered@1.

the SDK — tow.recover
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"})
POST /tows/recover
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.

receipt · executed 2026-08-17T12:42:18.438Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.wheelLiftRequested@1 · Tow.wheelLifted@1.

the SDK — tow.wheelLift
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"})
POST /tows/wheel-lift
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.

receipt · executed 2026-08-17T12:42:18.442Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

Dooraggregator.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.

EmitsTow.winchFailed@1 · Tow.winchRequested@1 · Tow.winched@1.

the SDK — tow.winch
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"})
POST /tows/winch
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.

receipt · executed 2026-08-17T12:42:18.442Z · HTTP 200
{
  "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

PropertyTypeNotes
ididtow_
vinstring
originstring
destinationstring
carrierIdref→Carrier
statusTowFSM

Relationships

FromToCardinalityAs
towvehicle*:1moves

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