paint
The paint noun — identity, lifecycle, events, and every capability as an anchored section: 21 capabilities, 0 live, 21 sandbox, 0 declared.
paint is one of the estate's 317 automotive nouns — a job a car needs done. It carries 21 capabilities: 0 live, 21 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | paint |
| Pillar | Services (facets: 6 data · 11 services · 4 commerce) |
| Capabilities | 21 — 0 live · 21 sandbox · 0 declared |
| Entities | Collision |
| Doors | aggregator.vin |
| SDK | Vin.paint.* from apis.vin |
| Address | /catalog/paint#{action} — the anchor IS the wire name minus paint. |
Events
The vocabulary this noun can append to the record — 38 past-tense, versioned event types, each linked to the capability that emits it:
Order.placed@1— emitted byorderPaint.bakeFailed@1— emitted bybakePaint.bakeRequested@1— emitted bybakePaint.baked@1— emitted bybakePaint.basecoatRequested@1— emitted bybasecoatPaint.basecoated@1— emitted bybasecoatPaint.blendRequested@1— emitted byblendPaint.blended@1— emitted byblendPaint.charged@1— emitted bypayPaint.clearcoatRequested@1— emitted byclearcoatPaint.clearcoated@1— emitted byclearcoatPaint.codeDecoded@1— emitted bycodeDecodePaint.colorMatched@1— emitted bycolorMatchPaint.completeRequested@1— emitted bycompletePaint.completed@1— emitted bycomplete·orderPaint.corrected@1— emitted bycorrectPaint.coverageCalculated@1— emitted bycoverageCalcPaint.dispatched@1— emitted byorderPaint.estimateRequested@1— emitted byestimatePaint.estimated@1— emitted byestimatePaint.maskRequested@1— emitted bymaskPaint.masked@1— emitted bymaskPaint.materialBillRequested@1— emitted bymaterialBillPaint.materialBilled@1— emitted bymaterialBillPaint.mixRequested@1— emitted bymixPaint.mixed@1— emitted bymixPaint.ordered@1— emitted byorderPaint.paid@1— emitted bypayPaint.payFailed@1— emitted bypayPaint.payRequested@1— emitted bypayPaint.scheduleRequested@1— emitted byschedulePaint.scheduled@1— emitted byschedulePaint.sprayFailed@1— emitted bysprayPaint.sprayRequested@1— emitted bysprayPaint.sprayed@1— emitted bysprayPaint.wetSandRequested@1— emitted bywetSandPaint.wetSanded@1— emitted bywetSandServiceOrder.settled@1— emitted byorder·pay
Discover & read
status
paint.status · GET /paints/status · gate none · sandbox · answers PaintStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.status({"vin":"3GTUUEE8XTG178810"})curl 'https://apis.vin/paints/status?vin=3GTUUEE8XTG178810'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintStatus@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"paint": {
"grade": "clean",
"work": "none-needed",
"jobStatus": "no-open-job"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"paint": {
"grade": "clean",
"work": "none-needed",
"jobStatus": "no-open-job"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}formulaLookup
paint.formulaLookup · GET /paints/formula-lookup · gate none · sandbox · answers PaintFormulaLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.formulaLookup({"vin":"3GTUUEE8XTG178810"})curl 'https://apis.vin/paints/formula-lookup?vin=3GTUUEE8XTG178810'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintFormulaLookup@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"formula": {
"code": "PF-7fd125bf",
"baseCoats": 2,
"clearCoats": 2,
"mixRatio": "2:1:1"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"formula": {
"code": "PF-7fd125bf",
"baseCoats": 2,
"clearCoats": 2,
"mixRatio": "2:1:1"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}depthRead
paint.depthRead · GET /paints/depth-read · gate none · sandbox · answers PaintDepthRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.depthRead({"vin":"3GTUUEE8XTG178810"})curl 'https://apis.vin/paints/depth-read?vin=3GTUUEE8XTG178810'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintDepthRead@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"reading": {
"readingTenthsMil": 53,
"unit": "tenths-mil",
"withinFactorySpec": true
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"reading": {
"readingTenthsMil": 53,
"unit": "tenths-mil",
"withinFactorySpec": true
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}codeDecode
paint.codeDecode · GET /paints/code-decode · gate none · sandbox · answers PaintCodeDecode@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.codeDecoded@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.codeDecode({"vin":"3GTUUEE8XTG178810"})curl 'https://apis.vin/paints/code-decode?vin=3GTUUEE8XTG178810'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintCodeDecode@1",
"value": {
"code": "NH-731P",
"colorFamily": "red",
"finish": "solid",
"coats": 2,
"formulaAvailable": true
},
"evidence": {
"code": "NH-731P",
"colorFamily": "red",
"finish": "solid",
"coats": 2,
"formulaAvailable": true
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "services-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}colorMatch
paint.colorMatch · GET /paints/color-match · gate none · sandbox · answers PaintColorMatch@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.colorMatched@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.colorMatch({"vin":"3GTUUEE8XTG178810"})curl 'https://apis.vin/paints/color-match?vin=3GTUUEE8XTG178810'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintColorMatch@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"match": {
"deltaE": 1,
"matched": true
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"match": {
"deltaE": 1,
"matched": true
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
estimate
paint.estimate · POST /paints/estimate · gate offer · sandbox · answers PaintEstimate@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.estimateRequested@1 · Paint.estimated@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.estimate({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/estimate \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintEstimate@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"estimateId": "DQ-1",
"serviceType": "recon",
"laborCents": 15727,
"partsCents": 10485,
"subtotalCents": 26212,
"estimateCents": 34076,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 5
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"estimateId": "DQ-1",
"serviceType": "recon",
"laborCents": 15727,
"partsCents": 10485,
"subtotalCents": 26212,
"estimateCents": 34076,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 5
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}coverageCalc
paint.coverageCalc · GET /paints/coverage-calc · gate none · sandbox · answers PaintCoverageCalc@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.coverageCalculated@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.coverageCalc({"vin":"3GTUUEE8XTG178810"})curl 'https://apis.vin/paints/coverage-calc?vin=3GTUUEE8XTG178810'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintCoverageCalc@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"coverage": {
"panels": 0,
"paintTenthsQt": 0,
"clearTenthsQt": 0
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"coverage": {
"panels": 0,
"paintTenthsQt": 0,
"clearTenthsQt": 0
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
order
paint.order · POST /paints/order · gate offer · sandbox · answers PaintOrder@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Order.placed@1 · Paint.completed@1 · Paint.dispatched@1 · Paint.ordered@1 · ServiceOrder.settled@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.order({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/order \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintOrder@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"order": {
"status": "no-paint-work-needed",
"amountCents": 0,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"order": {
"status": "no-paint-work-needed",
"amountCents": 0,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}schedule
paint.schedule · POST /paints/schedule · gate offer · sandbox · answers PaintSchedule@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.scheduleRequested@1 · Paint.scheduled@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.schedule({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/schedule \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintSchedule@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"booth": {
"status": "nothing-to-schedule"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"booth": {
"status": "nothing-to-schedule"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
paint.pay · POST /paints/pay · gate offer · sandbox · answers PaintPay@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.charged@1 · Paint.paid@1 · Paint.payFailed@1 · Paint.payRequested@1 · ServiceOrder.settled@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.pay({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/pay \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintPay@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"payment": {
"status": "nothing-billed",
"amountCents": 0,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"payment": {
"status": "nothing-billed",
"amountCents": 0,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}materialBill
paint.materialBill · POST /paints/material-bill · gate offer · sandbox · answers PaintMaterialBill@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.materialBillRequested@1 · Paint.materialBilled@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.materialBill({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/material-bill \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintMaterialBill@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"bill": {
"status": "no-materials-needed",
"amountCents": 0,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"bill": {
"status": "no-materials-needed",
"amountCents": 0,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
complete
paint.complete · POST /paints/complete · gate offer · sandbox · answers PaintComplete@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.completeRequested@1 · Paint.completed@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.complete({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/complete \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintComplete@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"job": {
"status": "no-open-job"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"job": {
"status": "no-open-job"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
bake
paint.bake · POST /paints/bake · gate offer · sandbox · answers PaintBake@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.bakeFailed@1 · Paint.bakeRequested@1 · Paint.baked@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.bake({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/bake \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintBake@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "bake",
"status": "no-paint-work-needed"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "bake",
"status": "no-paint-work-needed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}basecoat
paint.basecoat · POST /paints/basecoat · gate offer · sandbox · answers PaintBasecoat@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.basecoatRequested@1 · Paint.basecoated@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.basecoat({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/basecoat \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintBasecoat@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "basecoat",
"status": "no-paint-work-needed"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "basecoat",
"status": "no-paint-work-needed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}blend
paint.blend · POST /paints/blend · gate offer · sandbox · answers PaintBlend@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.blendRequested@1 · Paint.blended@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.blend({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/blend \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintBlend@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "blend",
"status": "no-paint-work-needed"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "blend",
"status": "no-paint-work-needed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}clearcoat
paint.clearcoat · POST /paints/clearcoat · gate offer · sandbox · answers PaintClearcoat@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.clearcoatRequested@1 · Paint.clearcoated@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.clearcoat({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/clearcoat \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintClearcoat@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "clearcoat",
"status": "no-paint-work-needed"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "clearcoat",
"status": "no-paint-work-needed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}correct
paint.correct · POST /paints/correct · gate offer · sandbox · answers PaintCorrect@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.corrected@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.correct({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/correct \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintCorrect@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "correct",
"status": "no-paint-work-needed"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "correct",
"status": "no-paint-work-needed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}mask
paint.mask · POST /paints/mask · gate offer · sandbox · answers PaintMask@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.maskRequested@1 · Paint.masked@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.mask({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/mask \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintMask@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "mask",
"status": "no-paint-work-needed"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "mask",
"status": "no-paint-work-needed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}mix
paint.mix · POST /paints/mix · gate offer · sandbox · answers PaintMix@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.mixRequested@1 · Paint.mixed@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.mix({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/mix \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintMix@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "mix",
"status": "no-paint-work-needed"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "mix",
"status": "no-paint-work-needed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}spray
paint.spray · POST /paints/spray · gate offer · sandbox · answers PaintSpray@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.sprayFailed@1 · Paint.sprayRequested@1 · Paint.sprayed@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.spray({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/spray \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintSpray@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "spray",
"status": "no-paint-work-needed"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "spray",
"status": "no-paint-work-needed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}wetSand
paint.wetSand · POST /paints/wet-sand · gate offer · sandbox · answers PaintWetSand@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3GTUUEE8XTG178810 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Paint.wetSandRequested@1 · Paint.wetSanded@1.
import { paint } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await paint.wetSand({"vin":"3GTUUEE8XTG178810"})curl -X POST https://apis.vin/paints/wet-sand \
-H 'content-type: application/json' \
-d '{"vin":"3GTUUEE8XTG178810"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "PaintWetSand@1",
"value": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "wetSand",
"status": "no-paint-work-needed"
}
},
"evidence": {
"vin": "3GTUUEE8XTG178810",
"noun": "paint",
"asOf": "2026-08-10",
"grade": "clean",
"work": "none-needed",
"step": {
"operation": "wetSand",
"status": "no-paint-work-needed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "condition-care-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.
Paint · Class model
Paint · State machine
Paint · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.