docs.vin

body

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

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

Identity

Nounbody
PillarServices (facets: 5 data · 7 services · 3 commerce)
Capabilities15 — 0 live · 15 sandbox · 0 declared
EntitiesCollision
Doorsaggregator.vin
SDKVin.body.* from apis.vin
Address/catalog/body#{action} — the anchor IS the wire name minus body.

Events

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

Discover & read

assess

body.assess · GET /bodies/assess · gate none · sandbox · answers BodyAssess@1

FieldTypeRequiredNotes
vinstringno

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

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

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:08.160Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyAssess@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "assessment": {
      "severity": "none",
      "grade": "clean",
      "panels": 0,
      "structural": false,
      "paintWork": "none-needed"
    }
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "assessment": {
      "severity": "none",
      "grade": "clean",
      "panels": 0,
      "structural": false,
      "paintWork": "none-needed"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

measure

body.measure · GET /bodies/measure · gate none · sandbox · answers BodyMeasure@1

FieldTypeRequiredNotes
vinstringno

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

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

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:08.162Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyMeasure@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "frame": {
      "withinTolerance": true,
      "structural": false
    }
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "frame": {
      "withinTolerance": true,
      "structural": false
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

frameToleranceRead

body.frameToleranceRead · GET /bodies/frame-tolerance-read · gate none · sandbox · answers BodyFrameToleranceRead@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await body.frameToleranceRead({"vin":"5XYP5DGC8PG326978"})
GET /bodies/frame-tolerance-read
curl 'https://apis.vin/bodies/frame-tolerance-read?vin=5XYP5DGC8PG326978'

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:08.162Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyFrameToleranceRead@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "frame": {
      "withinTolerance": true,
      "structural": false
    }
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "frame": {
      "withinTolerance": true,
      "structural": false
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

estimate

body.estimate · POST /bodies/estimate · gate offer · sandbox · answers BodyEstimate@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) · /5XYP5DGC8PG326978 (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.

EmitsBody.estimated@1.

the SDK — body.estimate
import { body } from 'apis.vin'

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

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:08.161Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyEstimate@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "estimate": {
      "status": "no-loss-recorded",
      "amountCents": 0,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "estimate": {
      "status": "no-loss-recorded",
      "amountCents": 0,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

order

body.order · POST /bodies/order · gate offer · sandbox · answers BodyOrder@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) · /5XYP5DGC8PG326978 (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.

EmitsBody.ordered@1 · Order.placed@1 · ServiceOrder.settled@1.

the SDK — body.order
import { body } from 'apis.vin'

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

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:08.163Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyOrder@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "order": {
      "id": "ORD-2d3ca778",
      "item": "body panels",
      "status": "nothing-to-order",
      "amountCents": 0,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "order": {
      "id": "ORD-2d3ca778",
      "item": "body panels",
      "status": "nothing-to-order",
      "amountCents": 0,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

body.pay · POST /bodies/pay · gate offer · sandbox · answers BodyPay@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) · /5XYP5DGC8PG326978 (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.

EmitsBody.charged@1 · ServiceOrder.settled@1.

the SDK — body.pay
import { body } from 'apis.vin'

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

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:08.164Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyPay@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "payment": {
      "id": "PAY-0775070e",
      "status": "settled",
      "amountCents": 0,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "payment": {
      "id": "PAY-0775070e",
      "status": "settled",
      "amountCents": 0,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

panelReplace

body.panelReplace · POST /bodies/panel-replace · gate offer · sandbox · answers BodyPanelReplace@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) · /5XYP5DGC8PG326978 (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.

EmitsBody.panelReplaced@1.

the SDK — body.panelReplace
import { body } from 'apis.vin'

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

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:08.164Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyPanelReplace@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "panelReplace",
    "status": "no-open-repair"
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "panelReplace",
    "status": "no-open-repair"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

damageMap

body.damageMap · GET /bodies/damage-map · gate none · sandbox · answers BodyDamageMap@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await body.damageMap({"vin":"5XYP5DGC8PG326978"})
GET /bodies/damage-map
curl 'https://apis.vin/bodies/damage-map?vin=5XYP5DGC8PG326978'

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:08.160Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyDamageMap@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "damageMap": {
      "panels": [],
      "count": 0
    }
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "damageMap": {
      "panels": [],
      "count": 0
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

dentPull

body.dentPull · POST /bodies/dent-pull · gate offer · sandbox · answers BodyDentPull@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) · /5XYP5DGC8PG326978 (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.

EmitsBody.dentPulled@1.

the SDK — body.dentPull
import { body } from 'apis.vin'

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

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:08.160Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyDentPull@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "dentPull",
    "status": "no-open-repair"
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "dentPull",
    "status": "no-open-repair"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

filler

body.filler · POST /bodies/filler · gate offer · sandbox · answers BodyFiller@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) · /5XYP5DGC8PG326978 (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.

EmitsBody.filled@1.

the SDK — body.filler
import { body } from 'apis.vin'

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

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:08.161Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyFiller@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "filler",
    "status": "no-open-repair"
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "filler",
    "status": "no-open-repair"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

frameStraighten

body.frameStraighten · POST /bodies/frame-straighten · gate offer · sandbox · answers BodyFrameStraighten@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) · /5XYP5DGC8PG326978 (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.

EmitsBody.frameStraightened@1.

the SDK — body.frameStraighten
import { body } from 'apis.vin'

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

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:08.161Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyFrameStraighten@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "frameStraighten",
    "status": "no-open-repair"
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "frameStraighten",
    "status": "no-open-repair"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

panelId

body.panelId · GET /bodies/panel-id · gate none · sandbox · answers BodyPanelId@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await body.panelId({"vin":"5XYP5DGC8PG326978"})
GET /bodies/panel-id
curl 'https://apis.vin/bodies/panel-id?vin=5XYP5DGC8PG326978'

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:08.163Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyPanelId@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "panel": {
      "status": "no-damage-recorded"
    }
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "panel": {
      "status": "no-damage-recorded"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

prime

body.prime · POST /bodies/prime · gate offer · sandbox · answers BodyPrime@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) · /5XYP5DGC8PG326978 (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.

EmitsBody.primed@1.

the SDK — body.prime
import { body } from 'apis.vin'

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

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:08.165Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyPrime@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "prime",
    "status": "no-open-repair"
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "prime",
    "status": "no-open-repair"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

sand

body.sand · POST /bodies/sand · gate offer · sandbox · answers BodySand@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) · /5XYP5DGC8PG326978 (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.

EmitsBody.sanded@1.

the SDK — body.sand
import { body } from 'apis.vin'

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

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:08.200Z · HTTP 200
{
  "type": "OK",
  "answers": "BodySand@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "sand",
    "status": "no-open-repair"
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "sand",
    "status": "no-open-repair"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

weld

body.weld · POST /bodies/weld · gate offer · sandbox · answers BodyWeld@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) · /5XYP5DGC8PG326978 (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.

EmitsBody.welded@1.

the SDK — body.weld
import { body } from 'apis.vin'

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

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:08.203Z · HTTP 200
{
  "type": "OK",
  "answers": "BodyWeld@1",
  "value": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "weld",
    "status": "no-open-repair"
  },
  "evidence": {
    "vin": "5XYP5DGC8PG326978",
    "noun": "body",
    "asOf": "2026-08-10",
    "position": "NoLoss",
    "operation": "weld",
    "status": "no-open-repair"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "wrench-wear-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.

Collision

Modeled

The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 3 diagrams, rendered from the estate model.

Body · Class model

Body · State machine

Body · Sequence


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