docs.vin

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

Nounpaint
PillarServices (facets: 6 data · 11 services · 4 commerce)
Capabilities21 — 0 live · 21 sandbox · 0 declared
EntitiesCollision
Doorsaggregator.vin
SDKVin.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:

Discover & read

status

paint.status · GET /paints/status · gate none · sandbox · answers PaintStatus@1

FieldTypeRequiredNotes
vinstringno

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

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

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — paint.formulaLookup
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"})
GET /paints/formula-lookup
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — paint.depthRead
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"})
GET /paints/depth-read
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.

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

FieldTypeRequiredNotes
vinstringno

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

EmitsPaint.codeDecoded@1.

the SDK — paint.codeDecode
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"})
GET /paints/code-decode
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.

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

FieldTypeRequiredNotes
vinstringno

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

EmitsPaint.colorMatched@1.

the SDK — paint.colorMatch
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"})
GET /paints/color-match
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.

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

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) · /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.

EmitsPaint.estimateRequested@1 · Paint.estimated@1.

the SDK — paint.estimate
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"})
POST /paints/estimate
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.

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

FieldTypeRequiredNotes
vinstringno

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

EmitsPaint.coverageCalculated@1.

the SDK — paint.coverageCalc
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"})
GET /paints/coverage-calc
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.

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

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) · /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.

EmitsOrder.placed@1 · Paint.completed@1 · Paint.dispatched@1 · Paint.ordered@1 · ServiceOrder.settled@1.

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

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

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) · /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.

EmitsPaint.scheduleRequested@1 · Paint.scheduled@1.

the SDK — paint.schedule
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"})
POST /paints/schedule
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.

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

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) · /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.

EmitsPaint.charged@1 · Paint.paid@1 · Paint.payFailed@1 · Paint.payRequested@1 · ServiceOrder.settled@1.

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

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

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) · /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.

EmitsPaint.materialBillRequested@1 · Paint.materialBilled@1.

the SDK — paint.materialBill
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"})
POST /paints/material-bill
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.

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

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) · /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.

EmitsPaint.completeRequested@1 · Paint.completed@1.

the SDK — paint.complete
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"})
POST /paints/complete
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.

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

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) · /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.

EmitsPaint.bakeFailed@1 · Paint.bakeRequested@1 · Paint.baked@1.

the SDK — paint.bake
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"})
POST /paints/bake
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.

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

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) · /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.

EmitsPaint.basecoatRequested@1 · Paint.basecoated@1.

the SDK — paint.basecoat
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"})
POST /paints/basecoat
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.

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

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) · /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.

EmitsPaint.blendRequested@1 · Paint.blended@1.

the SDK — paint.blend
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"})
POST /paints/blend
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.

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

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) · /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.

EmitsPaint.clearcoatRequested@1 · Paint.clearcoated@1.

the SDK — paint.clearcoat
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"})
POST /paints/clearcoat
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.

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

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) · /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.

EmitsPaint.corrected@1.

the SDK — paint.correct
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"})
POST /paints/correct
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.

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

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) · /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.

EmitsPaint.maskRequested@1 · Paint.masked@1.

the SDK — paint.mask
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"})
POST /paints/mask
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.

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

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) · /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.

EmitsPaint.mixRequested@1 · Paint.mixed@1.

the SDK — paint.mix
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"})
POST /paints/mix
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.

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

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) · /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.

EmitsPaint.sprayFailed@1 · Paint.sprayRequested@1 · Paint.sprayed@1.

the SDK — paint.spray
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"})
POST /paints/spray
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.

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

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) · /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.

EmitsPaint.wetSandRequested@1 · Paint.wetSanded@1.

the SDK — paint.wetSand
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"})
POST /paints/wet-sand
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.

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