docs.vin

part

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

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

Identity

Nounpart
PillarData (facets: 17 data · 9 services · 11 commerce)
Capabilities37 — 0 live · 37 sandbox · 0 declared
EntitiesPart
Doorsaggregator.vin
SDKVin.part.* from apis.vin
Address/catalog/part#{action} — the anchor IS the wire name minus part.

Lifecycle

PartPartFSM: 7 states, 7 transitions — Ordered · Backordered · Stocked · Picked · Staged · Installed · Returned. Each transition is a past-tense event on the record.

Events

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

Discover & read

lookup

part.lookup · GET /parts/lookup · gate none · sandbox · answers PartLookup@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.lookup({"vin":"KNDPVCAG3P7076312"})
GET /parts/lookup
curl 'https://apis.vin/parts/lookup?vin=KNDPVCAG3P7076312'

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:14.876Z · HTTP 200
{
  "type": "OK",
  "answers": "PartLookup@1",
  "value": {
    "partNumber": "PN-000000",
    "description": "Filter assembly",
    "category": "electrical",
    "source": "oe",
    "unitPriceCents": 14363,
    "currency": "USD"
  },
  "evidence": {
    "partNumber": "PN-000000",
    "description": "Filter assembly",
    "category": "electrical",
    "source": "oe",
    "unitPriceCents": 14363,
    "currency": "USD"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "services-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

spec

part.spec · GET /parts/spec · gate none · sandbox · answers PartSpec@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.spec({"vin":"KNDPVCAG3P7076312"})
GET /parts/spec
curl 'https://apis.vin/parts/spec?vin=KNDPVCAG3P7076312'

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:14.968Z · HTTP 200
{
  "type": "OK",
  "answers": "PartSpec@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "spec",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "spec",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

history

part.history · GET /parts/history · gate none · sandbox · answers PartHistory@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.history({"vin":"KNDPVCAG3P7076312"})
GET /parts/history
curl 'https://apis.vin/parts/history?vin=KNDPVCAG3P7076312'

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:14.872Z · HTTP 200
{
  "type": "OK",
  "answers": "PartHistory@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "events": [
      {
        "date": "2024-03-14",
        "kind": "maintenance",
        "description": "scheduled replacement component service"
      }
    ],
    "count": 1
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "events": [
      {
        "date": "2024-03-14",
        "kind": "maintenance",
        "description": "scheduled replacement component service"
      }
    ],
    "count": 1
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

availability

part.availability · GET /parts/availability · gate none · sandbox · answers PartAvailability@1

FieldTypeRequiredNotes
vinstringno
partNumberstringnoOEM/aftermarket part number — the PartsCatalog SKU the price/availability/supersession lookup keys on.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.availability({"vin":"KNDPVCAG3P7076312","partNumber":"partnumber"})
GET /parts/availability
curl 'https://apis.vin/parts/availability?vin=KNDPVCAG3P7076312&partNumber=partnumber'

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:14.828Z · HTTP 200
{
  "type": "OK",
  "answers": "PartAvailability@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "onHand": 9,
    "binLocation": "B-33",
    "status": "counted"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "onHand": 9,
    "binLocation": "B-33",
    "status": "counted"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

fitment

part.fitment · GET /parts/fitment · gate none · sandbox · answers PartFitment@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.fitment({"vin":"KNDPVCAG3P7076312"})
GET /parts/fitment
curl 'https://apis.vin/parts/fitment?vin=KNDPVCAG3P7076312'

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:14.861Z · HTTP 200
{
  "type": "OK",
  "answers": "PartFitment@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "partNumber": "PN-000000",
    "fits": false,
    "notes": "check trim/engine variant"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "partNumber": "PN-000000",
    "fits": false,
    "notes": "check trim/engine variant"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "services-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

diagramLookup

part.diagramLookup · GET /parts/diagram-lookup · gate none · sandbox · answers PartDiagramLookup@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.diagramLookup({"vin":"KNDPVCAG3P7076312"})
GET /parts/diagram-lookup
curl 'https://apis.vin/parts/diagram-lookup?vin=KNDPVCAG3P7076312'

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:14.861Z · HTTP 200
{
  "type": "OK",
  "answers": "PartDiagramLookup@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "diagramLookup",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe",
    "diagramRef": "DG-b924c2d8"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "diagramLookup",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe",
    "diagramRef": "DG-b924c2d8"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

oeDecode

part.oeDecode · GET /parts/oe-decode · gate none · sandbox · answers PartOeDecode@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /KNDPVCAG3P7076312 (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.

EmitsPart.oeDecoded@1.

the SDK — part.oeDecode
import { part } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.oeDecode({"vin":"KNDPVCAG3P7076312"})
GET /parts/oe-decode
curl 'https://apis.vin/parts/oe-decode?vin=KNDPVCAG3P7076312'

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:14.968Z · HTTP 200
{
  "type": "OK",
  "answers": "PartOeDecode@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "oeDecode",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "oeDecode",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

stockCheck

part.stockCheck · GET /parts/stock-check · gate none · sandbox · answers PartStockCheck@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.stockCheck({"vin":"KNDPVCAG3P7076312"})
GET /parts/stock-check
curl 'https://apis.vin/parts/stock-check?vin=KNDPVCAG3P7076312'

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:14.969Z · HTTP 200
{
  "type": "OK",
  "answers": "PartStockCheck@1",
  "value": {
    "partNumber": "PN-000000",
    "onHand": 12,
    "available": 12,
    "backordered": false,
    "location": "C-07"
  },
  "evidence": {
    "partNumber": "PN-000000",
    "onHand": 12,
    "available": 12,
    "backordered": false,
    "location": "C-07"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "services-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

aftermarketMatch

part.aftermarketMatch · GET /parts/aftermarket-match · gate none · sandbox · answers PartAftermarketMatch@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.aftermarketMatch({"vin":"KNDPVCAG3P7076312"})
GET /parts/aftermarket-match
curl 'https://apis.vin/parts/aftermarket-match?vin=KNDPVCAG3P7076312'

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:14.828Z · HTTP 200
{
  "type": "OK",
  "answers": "PartAftermarketMatch@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "aftermarketMatch",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "aftermarket"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "aftermarketMatch",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "aftermarket"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

quote

part.quote · POST /parts/quote · gate offer · sandbox · answers PartQuote@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.quoteRequested@1 · Part.quoted@1.

the SDK — part.quote
import { part } from 'apis.vin'

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

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:14.968Z · HTTP 200
{
  "type": "OK",
  "answers": "PartQuote@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "band": "pass",
    "quoteId": "PQ-1bb9f8fd",
    "partNumber": "P-970c72fa",
    "subtotalCents": 24000,
    "partSource": "aftermarket",
    "currency": "USD"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "band": "pass",
    "quoteId": "PQ-1bb9f8fd",
    "partNumber": "P-970c72fa",
    "subtotalCents": 24000,
    "partSource": "aftermarket",
    "currency": "USD"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

price

part.price · GET /parts/price · gate none · sandbox · answers PartPrice@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.price({"vin":"KNDPVCAG3P7076312"})
GET /parts/price
curl 'https://apis.vin/parts/price?vin=KNDPVCAG3P7076312'

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:14.968Z · HTTP 200
{
  "type": "OK",
  "answers": "PartPrice@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "unitPriceCents": 24000,
    "currency": "USD",
    "priceLevel": "retail"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "unitPriceCents": 24000,
    "currency": "USD",
    "priceLevel": "retail"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

priceLookup

part.priceLookup · GET /parts/price-lookup · gate none · sandbox · answers PartPriceLookup@1

FieldTypeRequiredNotes
vinstringno
partNumberstringnoOEM/aftermarket part number — the PartsCatalog SKU the price/availability/supersession lookup keys on.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.priceLookup({"vin":"KNDPVCAG3P7076312","partNumber":"partnumber"})
GET /parts/price-lookup
curl 'https://apis.vin/parts/price-lookup?vin=KNDPVCAG3P7076312&partNumber=partnumber'

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:14.968Z · HTTP 200
{
  "type": "BLOCKED",
  "reason": "RAIL_FAULT",
  "message": "part.priceLookup — the estimator sandbox has no seeded answer for the given input (unknown-part)",
  "events": [],
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "sandbox"
  }
}

matrixPrice

part.matrixPrice · POST /parts/matrix-price · gate offer · sandbox · answers PartMatrixPrice@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.matrixPriced@1.

the SDK — part.matrixPrice
import { part } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.matrixPrice({"vin":"KNDPVCAG3P7076312"})
POST /parts/matrix-price
curl -X POST https://apis.vin/parts/matrix-price \
  -H 'content-type: application/json' \
  -d '{"vin":"KNDPVCAG3P7076312"}'

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:14.876Z · HTTP 200
{
  "type": "OK",
  "answers": "PartMatrixPrice@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "unitPriceCents": 24000,
    "currency": "USD",
    "priceLevel": "matrix"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "unitPriceCents": 24000,
    "currency": "USD",
    "priceLevel": "matrix"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

wholesalePrice

part.wholesalePrice · POST /parts/wholesale-price · gate offer · sandbox · answers PartWholesalePrice@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.wholesalePriced@1.

the SDK — part.wholesalePrice
import { part } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.wholesalePrice({"vin":"KNDPVCAG3P7076312"})
POST /parts/wholesale-price
curl -X POST https://apis.vin/parts/wholesale-price \
  -H 'content-type: application/json' \
  -d '{"vin":"KNDPVCAG3P7076312"}'

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:15.009Z · HTTP 200
{
  "type": "OK",
  "answers": "PartWholesalePrice@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "unitPriceCents": 16800,
    "currency": "USD",
    "priceLevel": "wholesale"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "unitPriceCents": 16800,
    "currency": "USD",
    "priceLevel": "wholesale"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

order

part.order · POST /parts/order · gate offer · sandbox · answers PartOrder@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) · /KNDPVCAG3P7076312 (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.

EmitsOrder.placed@1 · Part.completed@1 · Part.dispatched@1 · Part.ordered@1 · RepairOrder.partsOrdered@1 · RepairOrder.partsReceived@1 · ServiceOrder.settled@1.

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

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

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:14.968Z · HTTP 200
{
  "type": "OK",
  "answers": "PartOrder@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "order": {
      "id": "ORD-56ad2ddd",
      "item": "replacement component",
      "status": "placed",
      "amountCents": 24000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "order": {
      "id": "ORD-56ad2ddd",
      "item": "replacement component",
      "status": "placed",
      "amountCents": 24000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [
    "RepairOrder.partsOrdered@1"
  ],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

subscribe

part.subscribe · POST /parts/subscribe · gate key · sandbox · answers PartSubscribe@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /KNDPVCAG3P7076312 (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.

EmitsPart.subscribed@1.

the SDK — part.subscribe
import { part } from 'apis.vin'

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

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-16T14:50:09.958Z · HTTP 200
{
  "type": "OK",
  "answers": "PartSubscribe@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "part",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "SB-007f6ce3",
      "topic": "part-availability",
      "status": "active"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "part",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "SB-007f6ce3",
      "topic": "part-availability",
      "status": "active"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

stage

part.stage · POST /parts/stage · gate offer · sandbox · answers PartStage@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.stageRequested@1 · Part.staged@1.

the SDK — part.stage
import { part } from 'apis.vin'

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

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:14.968Z · HTTP 200
{
  "type": "OK",
  "answers": "PartStage@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "movement": {
      "id": "MV-290f9d37",
      "operation": "stage",
      "status": "completed"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "movement": {
      "id": "MV-290f9d37",
      "operation": "stage",
      "status": "completed"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

backorder

part.backorder · POST /parts/backorder · gate offer · sandbox · answers PartBackorder@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.backorderRequested@1 · Part.backordered@1.

the SDK — part.backorder
import { part } from 'apis.vin'

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

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:14.828Z · HTTP 200
{
  "type": "OK",
  "answers": "PartBackorder@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "status": "backordered",
    "etaDays": 4
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "status": "backordered",
    "etaDays": 4
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

part.pay · POST /parts/pay · gate offer · sandbox · answers PartPay@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.charged@1 · Part.paid@1 · Part.payFailed@1 · Part.payRequested@1 · ServiceOrder.settled@1.

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

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

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:14.968Z · HTTP 200
{
  "type": "OK",
  "answers": "PartPay@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "payment": {
      "id": "PAY-5dc0c0ab",
      "status": "settled",
      "amountCents": 24000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "payment": {
      "id": "PAY-5dc0c0ab",
      "status": "settled",
      "amountCents": 24000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

invoice

part.invoice · POST /parts/invoice · gate offer · sandbox · answers PartInvoice@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.invoiceFailed@1 · Part.invoiceRequested@1 · Part.invoiced@1.

the SDK — part.invoice
import { part } from 'apis.vin'

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

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:14.876Z · HTTP 200
{
  "type": "OK",
  "answers": "PartInvoice@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "invoice": {
      "id": "INV-b1660fd2",
      "status": "issued",
      "amountCents": 24000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "invoice": {
      "id": "INV-b1660fd2",
      "status": "issued",
      "amountCents": 24000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

refund

part.refund · POST /parts/refund · gate offer · sandbox · answers PartRefund@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.refundFailed@1 · Part.refundRequested@1 · Part.refunded@1.

the SDK — part.refund
import { part } from 'apis.vin'

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

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:14.968Z · HTTP 200
{
  "type": "OK",
  "answers": "PartRefund@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "refund": {
      "id": "RF-9cd7a789",
      "kind": "return",
      "status": "issued",
      "amountCents": 24000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "refund": {
      "id": "RF-9cd7a789",
      "kind": "return",
      "status": "issued",
      "amountCents": 24000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

coreCharge

part.coreCharge · POST /parts/core-charge · gate offer · sandbox · answers PartCoreCharge@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.coreChargeRequested@1 · Part.coreCharged@1.

the SDK — part.coreCharge
import { part } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.coreCharge({"vin":"KNDPVCAG3P7076312"})
POST /parts/core-charge
curl -X POST https://apis.vin/parts/core-charge \
  -H 'content-type: application/json' \
  -d '{"vin":"KNDPVCAG3P7076312"}'

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:14.832Z · HTTP 200
{
  "type": "OK",
  "answers": "PartCoreCharge@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "fee": {
      "kind": "core-deposit",
      "amountCents": 3500,
      "currency": "USD",
      "status": "charged"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "fee": {
      "kind": "core-deposit",
      "amountCents": 3500,
      "currency": "USD",
      "status": "charged"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

install

part.install · POST /parts/install · gate offer · sandbox · answers PartInstall@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.installFailed@1 · Part.installRequested@1 · Part.installed@1.

the SDK — part.install
import { part } from 'apis.vin'

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

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:14.873Z · HTTP 200
{
  "type": "OK",
  "answers": "PartInstall@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "workOrder": {
      "id": "WO-c4acccba",
      "operation": "install",
      "status": "scheduled",
      "costCents": 12000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "workOrder": {
      "id": "WO-c4acccba",
      "operation": "install",
      "status": "scheduled",
      "costCents": 12000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

transfer

part.transfer · POST /parts/transfer · gate offer · sandbox · answers PartTransfer@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.transferFailed@1 · Part.transferRequested@1 · Part.transferred@1.

the SDK — part.transfer
import { part } from 'apis.vin'

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

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:15.008Z · HTTP 200
{
  "type": "OK",
  "answers": "PartTransfer@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "movement": {
      "id": "MV-e3cc4590",
      "operation": "transfer",
      "status": "completed"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "movement": {
      "id": "MV-e3cc4590",
      "operation": "transfer",
      "status": "completed"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

return

part.return · POST /parts/return · gate offer · sandbox · answers PartReturn@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.returnRequested@1 · Part.returned@1.

the SDK — part.return
import { part } from 'apis.vin'

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

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:14.968Z · HTTP 200
{
  "type": "OK",
  "answers": "PartReturn@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "refund": {
      "id": "RF-10bdba29",
      "kind": "return",
      "status": "issued",
      "amountCents": 24000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "refund": {
      "id": "RF-10bdba29",
      "kind": "return",
      "status": "issued",
      "amountCents": 24000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

coreReturn

part.coreReturn · POST /parts/core-return · gate offer · sandbox · answers PartCoreReturn@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.coreReturnRequested@1 · Part.coreReturned@1.

the SDK — part.coreReturn
import { part } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.coreReturn({"vin":"KNDPVCAG3P7076312"})
POST /parts/core-return
curl -X POST https://apis.vin/parts/core-return \
  -H 'content-type: application/json' \
  -d '{"vin":"KNDPVCAG3P7076312"}'

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:14.841Z · HTTP 200
{
  "type": "OK",
  "answers": "PartCoreReturn@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "refund": {
      "id": "RF-ed315096",
      "kind": "core-deposit",
      "status": "issued",
      "amountCents": 3500,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "refund": {
      "id": "RF-ed315096",
      "kind": "core-deposit",
      "status": "issued",
      "amountCents": 3500,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

warrantyReturn

part.warrantyReturn · POST /parts/warranty-return · gate offer · sandbox · answers PartWarrantyReturn@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.warrantyReturnRequested@1 · Part.warrantyReturned@1.

the SDK — part.warrantyReturn
import { part } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.warrantyReturn({"vin":"KNDPVCAG3P7076312"})
POST /parts/warranty-return
curl -X POST https://apis.vin/parts/warranty-return \
  -H 'content-type: application/json' \
  -d '{"vin":"KNDPVCAG3P7076312"}'

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:15.008Z · HTTP 200
{
  "type": "OK",
  "answers": "PartWarrantyReturn@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "return": {
      "id": "WR-2832495a",
      "decision": "accepted"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "return": {
      "id": "WR-2832495a",
      "decision": "accepted"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

crossReference

part.crossReference · GET /parts/cross-reference · gate none · sandbox · answers PartCrossReference@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.crossReference({"vin":"KNDPVCAG3P7076312"})
GET /parts/cross-reference
curl 'https://apis.vin/parts/cross-reference?vin=KNDPVCAG3P7076312'

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:14.844Z · HTTP 200
{
  "type": "OK",
  "answers": "PartCrossReference@1",
  "value": {
    "partNumber": "PN-000000",
    "equivalents": [
      {
        "source": "oe",
        "number": "PN-000000"
      },
      {
        "source": "aftermarket",
        "number": "X189925"
      }
    ]
  },
  "evidence": {
    "partNumber": "PN-000000",
    "equivalents": [
      {
        "source": "oe",
        "number": "PN-000000"
      },
      {
        "source": "aftermarket",
        "number": "X189925"
      }
    ]
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "services-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

cycleCount

part.cycleCount · POST /parts/cycle-count · gate offer · sandbox · answers PartCycleCount@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.cycleCountRequested@1 · Part.cycleCounted@1.

the SDK — part.cycleCount
import { part } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.cycleCount({"vin":"KNDPVCAG3P7076312"})
POST /parts/cycle-count
curl -X POST https://apis.vin/parts/cycle-count \
  -H 'content-type: application/json' \
  -d '{"vin":"KNDPVCAG3P7076312"}'

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:14.852Z · HTTP 200
{
  "type": "OK",
  "answers": "PartCycleCount@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "onHand": 12,
    "binLocation": "B-33",
    "status": "counted"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "onHand": 12,
    "binLocation": "B-33",
    "status": "counted"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

diagram

part.diagram · GET /parts/diagram · gate none · sandbox · answers PartDiagram@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.diagram({"vin":"KNDPVCAG3P7076312"})
GET /parts/diagram
curl 'https://apis.vin/parts/diagram?vin=KNDPVCAG3P7076312'

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:14.856Z · HTTP 200
{
  "type": "OK",
  "answers": "PartDiagram@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "diagram",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe",
    "diagramRef": "DG-b924c2d8"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "diagram",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe",
    "diagramRef": "DG-b924c2d8"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

expedite

part.expedite · POST /parts/expedite · gate offer · sandbox · answers PartExpedite@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.expediteRequested@1 · Part.expedited@1.

the SDK — part.expedite
import { part } from 'apis.vin'

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

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:14.861Z · HTTP 200
{
  "type": "OK",
  "answers": "PartExpedite@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "status": "expedited",
    "etaDays": 2
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "status": "expedited",
    "etaDays": 2
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

fits

part.fits · GET /parts/fits · gate none · sandbox · answers PartFits@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.fits({"vin":"KNDPVCAG3P7076312"})
GET /parts/fits
curl 'https://apis.vin/parts/fits?vin=KNDPVCAG3P7076312'

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:14.861Z · HTTP 200
{
  "type": "OK",
  "answers": "PartFits@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "fits",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "fits",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

image

part.image · GET /parts/image · gate none · sandbox · answers PartImage@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.image({"vin":"KNDPVCAG3P7076312"})
GET /parts/image
curl 'https://apis.vin/parts/image?vin=KNDPVCAG3P7076312'

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:14.873Z · HTTP 200
{
  "type": "OK",
  "answers": "PartImage@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "image",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe",
    "imageRef": "IMG-5a0bfc20"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "lookup": "image",
    "partNumber": "P-970c72fa",
    "component": "replacement component",
    "fits": true,
    "partSource": "oe",
    "imageRef": "IMG-5a0bfc20"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

perpetualInventory

part.perpetualInventory · POST /parts/perpetual-inventory · gate key · sandbox · answers PartPerpetualInventory@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /KNDPVCAG3P7076312 (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.

EmitsPart.perpetualInventoried@1.

the SDK — part.perpetualInventory
import { part } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.perpetualInventory()
POST /parts/perpetual-inventory
curl -X POST https://apis.vin/parts/perpetual-inventory \
  -H 'content-type: application/json' \
  -d '{}'

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-16T14:50:09.956Z · HTTP 200
{
  "type": "OK",
  "answers": "PartPerpetualInventory@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-75699500",
    "onHand": 8,
    "binLocation": "B-7",
    "status": "counted"
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-75699500",
    "onHand": 8,
    "binLocation": "B-7",
    "status": "counted"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

pick

part.pick · POST /parts/pick · gate offer · sandbox · answers PartPick@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.pickRequested@1 · Part.picked@1.

the SDK — part.pick
import { part } from 'apis.vin'

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

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:14.968Z · HTTP 200
{
  "type": "OK",
  "answers": "PartPick@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "movement": {
      "id": "MV-df98f56e",
      "operation": "pick",
      "status": "completed"
    }
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "movement": {
      "id": "MV-df98f56e",
      "operation": "pick",
      "status": "completed"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

stock

part.stock · POST /parts/stock · gate offer · sandbox · answers PartStock@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) · /KNDPVCAG3P7076312 (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.

EmitsPart.stockRequested@1 · Part.stocked@1.

the SDK — part.stock
import { part } from 'apis.vin'

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

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:14.969Z · HTTP 200
{
  "type": "OK",
  "answers": "PartStock@1",
  "value": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "onHand": 4,
    "binLocation": "B-33",
    "status": "counted"
  },
  "evidence": {
    "vin": "KNDPVCAG3P7076312",
    "noun": "part",
    "asOf": "2026-08-10",
    "partNumber": "P-970c72fa",
    "onHand": 4,
    "binLocation": "B-33",
    "status": "counted"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

supersession

part.supersession · GET /parts/supersession · gate none · sandbox · answers PartSupersession@1

FieldTypeRequiredNotes
vinstringno
partNumberstringnoOEM/aftermarket part number — the PartsCatalog SKU the price/availability/supersession lookup keys on.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await part.supersession({"vin":"KNDPVCAG3P7076312","partNumber":"partnumber"})
GET /parts/supersession
curl 'https://apis.vin/parts/supersession?vin=KNDPVCAG3P7076312&partNumber=partnumber'

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:15.004Z · HTTP 200
{
  "type": "BLOCKED",
  "reason": "RAIL_FAULT",
  "message": "part.supersession — the estimator sandbox has no seeded answer for the given input (unknown-part)",
  "events": [],
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "sandbox"
  }
}

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.

Part

Schema

PropertyTypeNotes
ididpart_
partNumberstring
vinstring
repairOrderIdref→RepairOrder
pricemoney
statusPartFSM

Relationships

FromToCardinalityAs
partrepairOrder*:0..1fulfills

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