inspection
The inspection noun — identity, lifecycle, events, and every capability as an anchored section: 32 capabilities, 0 live, 32 sandbox, 0 declared.
inspection is one of the estate's 317 automotive nouns — a job a car needs done. It carries 32 capabilities: 0 live, 32 sandbox, 0 declared · doors inspection.vin · aggregator.vin.
Identity
| Noun | inspection |
| Pillar | Data (facets: 13 data · 11 services · 8 commerce) |
| Capabilities | 32 — 0 live · 32 sandbox · 0 declared |
| Entities | Inspection |
| Doors | aggregator.vin · inspection.vin |
| SDK | Vin.inspection.* from apis.vin |
| Address | /catalog/inspection#{action} — the anchor IS the wire name minus inspection. |
Lifecycle
Inspection — InspectionFSM: 6 states, 5 transitions — Ordered · Scheduled · InProgress · Completed · Passed · Failed. Each transition is a past-tense event on the record.
Events
The vocabulary this noun can append to the record — 47 past-tense, versioned event types, each linked to the capability that emits it:
Inspection.annotateRequested@1— emitted byannotateInspection.annotated@1— emitted byannotateInspection.captureFailed@1— emitted bycaptureInspection.captureRequested@1— emitted bycaptureInspection.captured@1— emitted bycaptureInspection.charged@1— emitted bypayInspection.completeRequested@1— emitted bycompleteInspection.completed@1— emitted bycomplete·orderInspection.dispatchInspectorRequested@1— emitted bydispatchInspectorInspection.dispatched@1— emitted byorderInspection.disputeRequested@1— emitted bydisputeInspection.disputed@1— emitted bydisputeInspection.failRequested@1— emitted byfailInspection.failed@1— emitted byfailInspection.feeCharged@1— emitted byfeeInspection.graded@1— emitted bygradeInspection.inspectorDispatched@1— emitted bydispatchInspectorInspection.invoiceFailed@1— emitted byinvoiceInspection.invoiceRequested@1— emitted byinvoiceInspection.invoiced@1— emitted byinvoiceInspection.issueStickered@1— emitted byissueStickerInspection.ordered@1— emitted byorderInspection.paid@1— emitted bypayInspection.passRequested@1— emitted bypassInspection.passed@1— emitted bypassInspection.payFailed@1— emitted bypayInspection.payRequested@1— emitted bypayInspection.performFailed@1— emitted byperformInspection.performRequested@1— emitted byperformInspection.performed@1— emitted byperformInspection.quoteRequested@1— emitted byquoteInspection.quoted@1— emitted byquoteInspection.reInspectRequested@1— emitted byreInspectInspection.reInspected@1— emitted byreInspectInspection.refundFailed@1— emitted byrefundInspection.refundRequested@1— emitted byrefundInspection.refunded@1— emitted byrefundInspection.reminded@1— emitted byremindInspection.resulted@1— emitted byresultInspection.scheduleRequested@1— emitted byscheduleInspection.scheduled@1— emitted byorder·scheduleInspection.settleFailed@1— emitted bysettleInspection.settleRequested@1— emitted bysettleInspection.settled@1— emitted bysettleInspection.subscribed@1— emitted bysubscribeOrder.placed@1— emitted byorderServiceOrder.settled@1— emitted byorder·pay
Discover & read
history
inspection.history · GET /inspections/history · gate none · sandbox · answers InspectionHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.history({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/history?vin=1C4RJFBG2KC555096'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": "InspectionHistory@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"events": [
{
"date": "2024-03-14",
"kind": "routine",
"description": "routine inspection record"
},
{
"date": "2024-11-02",
"kind": "routine",
"description": "routine inspection record"
}
]
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"events": [
{
"date": "2024-03-14",
"kind": "routine",
"description": "routine inspection record"
},
{
"date": "2024-11-02",
"kind": "routine",
"description": "routine inspection record"
}
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}verify
inspection.verify · GET /inspections/verify · gate none · sandbox · answers InspectionVerify@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.verify({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/verify?vin=1C4RJFBG2KC555096'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": "InspectionVerify@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"result": "passed",
"requestedVerb": "verify"
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"result": "passed",
"requestedVerb": "verify"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}result
inspection.result · GET /inspections/result · gate key · sandbox · answers InspectionResult@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.resulted@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.result({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/result?vin=1C4RJFBG2KC555096'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": "InspectionResult@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"result": "fail",
"inspectedAtMileage": 45000,
"advisories": [
"brake-pad-wear"
]
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"result": "fail",
"inspectedAtMileage": 45000,
"advisories": [
"brake-pad-wear"
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "services-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}compare
inspection.compare · GET /inspections/compare · gate none · sandbox · answers InspectionCompare@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.compare({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/compare?vin=1C4RJFBG2KC555096'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": "InspectionCompare@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"priorResult": "passed",
"delta": "none",
"consistent": true
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"priorResult": "passed",
"delta": "none",
"consistent": true
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}grade
inspection.grade · GET /inspections/grade · gate key · sandbox · answers InspectionGrade@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.graded@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.grade({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/grade?vin=1C4RJFBG2KC555096'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": "InspectionGrade@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"serviceType": "inspection",
"grade": "average",
"damage": [
{
"panel": "front-bumper",
"type": "scuff",
"severity": "minor",
"estimateCents": 6308
}
],
"reconRequired": false,
"reconEstimateCents": 6308,
"currency": "USD"
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"serviceType": "inspection",
"grade": "average",
"damage": [
{
"panel": "front-bumper",
"type": "scuff",
"severity": "minor",
"estimateCents": 6308
}
],
"reconRequired": false,
"reconEstimateCents": 6308,
"currency": "USD"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}photos
inspection.photos · GET /inspections/photos · gate none · sandbox · answers InspectionPhotos@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.photos({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/photos?vin=1C4RJFBG2KC555096'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": "InspectionPhotos@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"artifacts": {
"inspectionId": "INSP-850e3583",
"photos": 7,
"annotations": 1
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"artifacts": {
"inspectionId": "INSP-850e3583",
"photos": 7,
"annotations": 1
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}requirementsLookup
inspection.requirementsLookup · GET /inspections/requirements-lookup · gate none · sandbox · answers InspectionRequirementsLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.requirementsLookup({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/requirements-lookup?vin=1C4RJFBG2KC555096'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": "InspectionRequirementsLookup@1",
"value": {
"state": "CA",
"safetyRequired": false,
"emissionsRequired": true,
"obdRequired": false,
"cadenceMonths": 24
},
"evidence": {
"state": "CA",
"safetyRequired": false,
"emissionsRequired": true,
"obdRequired": false,
"cadenceMonths": 24
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "services-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}resultLookup
inspection.resultLookup · GET /inspections/result-lookup · gate none · sandbox · answers InspectionResultLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.resultLookup({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/result-lookup?vin=1C4RJFBG2KC555096'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": "InspectionResultLookup@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"result": "passed",
"grade": "clean"
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"result": "passed",
"grade": "clean"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}checklist
inspection.checklist · GET /inspections/checklist · gate none · sandbox · answers InspectionChecklist@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.checklist({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/checklist?vin=1C4RJFBG2KC555096'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": "InspectionChecklist@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"checklist": [
{
"item": "brakes",
"status": "pass"
},
{
"item": "tires",
"status": "pass"
},
{
"item": "lights",
"status": "pass"
},
{
"item": "wipers",
"status": "pass"
},
{
"item": "suspension",
"status": "pass"
},
{
"item": "exhaust",
"status": "pass"
},
{
"item": "horn",
"status": "pass"
},
{
"item": "mirrors",
"status": "pass"
}
],
"itemCount": 8
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"checklist": [
{
"item": "brakes",
"status": "pass"
},
{
"item": "tires",
"status": "pass"
},
{
"item": "lights",
"status": "pass"
},
{
"item": "wipers",
"status": "pass"
},
{
"item": "suspension",
"status": "pass"
},
{
"item": "exhaust",
"status": "pass"
},
{
"item": "horn",
"status": "pass"
},
{
"item": "mirrors",
"status": "pass"
}
],
"itemCount": 8
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "services-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}expiryCheck
inspection.expiryCheck · GET /inspections/expiry-check · gate none · sandbox · answers InspectionExpiryCheck@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.expiryCheck({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/expiry-check?vin=1C4RJFBG2KC555096'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": "InspectionExpiryCheck@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"valid": true,
"validThrough": "2027-08-31"
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"valid": true,
"validThrough": "2027-08-31"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}statusCheck
inspection.statusCheck · GET /inspections/status-check · gate none · sandbox · answers InspectionStatusCheck@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.statusCheck({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/status-check?vin=1C4RJFBG2KC555096'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": "InspectionStatusCheck@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"result": "passed",
"grade": "clean"
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"result": "passed",
"grade": "clean"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}stickerVerify
inspection.stickerVerify · GET /inspections/sticker-verify · gate none · sandbox · answers InspectionStickerVerify@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.stickerVerify({"vin":"1C4RJFBG2KC555096"})curl 'https://apis.vin/inspections/sticker-verify?vin=1C4RJFBG2KC555096'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": "InspectionStickerVerify@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"valid": true,
"stickerId": "STK-d3d790d1"
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"valid": true,
"stickerId": "STK-d3d790d1"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
inspection.quote · POST /inspections/quote · gate offer · sandbox · answers InspectionQuote@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.quoteRequested@1 · Inspection.quoted@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.quote({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/quote \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionQuote@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"quoteId": "DQ-1",
"serviceType": "inspection",
"costCents": 11148,
"priceCents": 14492,
"marginCents": 3344,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 2,
"rush": false,
"expires": "2026-08-17T00:00:00.000Z"
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"quoteId": "DQ-1",
"serviceType": "inspection",
"costCents": 11148,
"priceCents": 14492,
"marginCents": 3344,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 2,
"rush": false,
"expires": "2026-08-17T00:00:00.000Z"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}fee
inspection.fee · POST /inspections/fee · gate offer · sandbox · answers InspectionFee@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.feeCharged@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.fee({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/fee \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionFee@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"fee": {
"kind": "inspection-fee",
"amountCents": 12500,
"currency": "USD",
"status": "charged"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"fee": {
"kind": "inspection-fee",
"amountCents": 12500,
"currency": "USD",
"status": "charged"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
order
inspection.order · POST /inspections/order · gate offer · sandbox · answers InspectionOrder@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
type | string | yes | one of pre-purchase, post-purchase, safety, mechanical, condition, arbitration |
location | object | no | — |
subject | string | no | — |
authority | 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.
Delegated calls require a typed Mandate — { ceiling, perAction, expires, tripwires }; the ceiling is a field, not a conversation.
Door — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.completed@1 · Inspection.dispatched@1 · Inspection.ordered@1 · Inspection.scheduled@1 · Order.placed@1 · ServiceOrder.settled@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.order({"vin":"1C4RJFBG2KC555096","type":"pre-purchase"})curl -X POST https://apis.vin/inspections/order \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096","type":"pre-purchase"}'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": "InspectionOrder@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"orderId": "serviceorder_EMVh3MmY1dFQ",
"quoteId": "DQ-1",
"serviceType": "inspection",
"status": "Active",
"priceCents": 14492,
"currency": "USD"
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"orderId": "serviceorder_EMVh3MmY1dFQ",
"quoteId": "DQ-1",
"serviceType": "inspection",
"status": "Active",
"priceCents": 14492,
"currency": "USD"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}schedule
inspection.schedule · POST /inspections/schedule · gate offer · sandbox · answers InspectionSchedule@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.scheduleRequested@1 · Inspection.scheduled@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.schedule({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/schedule \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionSchedule@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"appointment": {
"id": "AP-78fab5ab",
"date": "2026-08-12",
"status": "scheduled",
"providerId": "PRV-5237f84a"
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"appointment": {
"id": "AP-78fab5ab",
"date": "2026-08-12",
"status": "scheduled",
"providerId": "PRV-5237f84a"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}subscribe
inspection.subscribe · POST /inspections/subscribe · gate key · sandbox · answers InspectionSubscribe@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.subscribed@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.subscribe()curl -X POST https://apis.vin/inspections/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.
{
"type": "OK",
"answers": "InspectionSubscribe@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"subscription": {
"id": "SB-f587f7a8",
"topic": "inspection-status",
"status": "active"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"subscription": {
"id": "SB-f587f7a8",
"topic": "inspection-status",
"status": "active"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
inspection.pay · POST /inspections/pay · gate offer · sandbox · answers InspectionPay@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.charged@1 · Inspection.paid@1 · Inspection.payFailed@1 · Inspection.payRequested@1 · ServiceOrder.settled@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.pay({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/pay \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionPay@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"payment": {
"id": "PAY-97ec4898",
"status": "settled",
"amountCents": 12500,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"payment": {
"id": "PAY-97ec4898",
"status": "settled",
"amountCents": 12500,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}capture
inspection.capture · POST /inspections/capture · gate offer · sandbox · answers InspectionCapture@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.captureFailed@1 · Inspection.captureRequested@1 · Inspection.captured@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.capture({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/capture \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionCapture@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"artifacts": {
"inspectionId": "INSP-850e3583",
"photos": 7,
"annotations": 1
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"artifacts": {
"inspectionId": "INSP-850e3583",
"photos": 7,
"annotations": 1
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}invoice
inspection.invoice · POST /inspections/invoice · gate offer · sandbox · answers InspectionInvoice@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.invoiceFailed@1 · Inspection.invoiceRequested@1 · Inspection.invoiced@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.invoice({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/invoice \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionInvoice@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"invoice": {
"id": "INV-a8ed3275",
"status": "issued",
"amountCents": 12500,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"invoice": {
"id": "INV-a8ed3275",
"status": "issued",
"amountCents": 12500,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}settle
inspection.settle · POST /inspections/settle · gate offer · sandbox · answers InspectionSettle@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.settleFailed@1 · Inspection.settleRequested@1 · Inspection.settled@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.settle({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/settle \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionSettle@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"payment": {
"id": "PAY-366c2c51",
"status": "settled",
"amountCents": 12500,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"payment": {
"id": "PAY-366c2c51",
"status": "settled",
"amountCents": 12500,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}refund
inspection.refund · POST /inspections/refund · gate offer · sandbox · answers InspectionRefund@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.refundFailed@1 · Inspection.refundRequested@1 · Inspection.refunded@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.refund({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/refund \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionRefund@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"refund": {
"id": "RFD-64cf3aac",
"status": "issued",
"amountCents": 12500,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"refund": {
"id": "RFD-64cf3aac",
"status": "issued",
"amountCents": 12500,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
perform
inspection.perform · POST /inspections/perform · gate offer · sandbox · answers InspectionPerform@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.performFailed@1 · Inspection.performRequested@1 · Inspection.performed@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.perform({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/perform \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionPerform@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"work": {
"id": "INSP-850e3583",
"status": "performed",
"outcome": "passed"
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"work": {
"id": "INSP-850e3583",
"status": "performed",
"outcome": "passed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}complete
inspection.complete · POST /inspections/complete · gate offer · sandbox · answers InspectionComplete@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.completeRequested@1 · Inspection.completed@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.complete({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/complete \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionComplete@1",
"value": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"completed": true,
"status": "Complete",
"eventName": "ServiceOrder.inspected@1",
"vin": "1C4RJFBG2KC555096",
"serviceType": "inspection",
"grade": "average",
"damage": [
{
"panel": "front-bumper",
"type": "scuff",
"severity": "minor",
"estimateCents": 6308
}
],
"reconRequired": false,
"reconEstimateCents": 6308,
"currency": "USD"
},
"evidence": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"completed": true,
"status": "Complete",
"eventName": "ServiceOrder.inspected@1",
"vin": "1C4RJFBG2KC555096",
"serviceType": "inspection",
"grade": "average",
"damage": [
{
"panel": "front-bumper",
"type": "scuff",
"severity": "minor",
"estimateCents": 6308
}
],
"reconRequired": false,
"reconEstimateCents": 6308,
"currency": "USD"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}annotate
inspection.annotate · POST /inspections/annotate · gate offer · sandbox · answers InspectionAnnotate@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.annotateRequested@1 · Inspection.annotated@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.annotate({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/annotate \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionAnnotate@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"artifacts": {
"inspectionId": "INSP-850e3583",
"photos": 7,
"annotations": 1
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"artifacts": {
"inspectionId": "INSP-850e3583",
"photos": 7,
"annotations": 1
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}remind
inspection.remind · POST /inspections/remind · gate key · sandbox · answers InspectionRemind@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.reminded@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.remind()curl -X POST https://apis.vin/inspections/remind \
-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.
{
"type": "OK",
"answers": "InspectionRemind@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"reminder": {
"id": "RM-05934525",
"channel": "message",
"status": "sent"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"reminder": {
"id": "RM-05934525",
"channel": "message",
"status": "sent"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}reInspect
inspection.reInspect · POST /inspections/re-inspect · gate offer · sandbox · answers InspectionReInspect@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.reInspectRequested@1 · Inspection.reInspected@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.reInspect({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/re-inspect \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionReInspect@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"reinspection": {
"id": "RI-ada0b35d",
"required": false,
"status": "not-required"
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"reinspection": {
"id": "RI-ada0b35d",
"required": false,
"status": "not-required"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Authorize & resolve
dispute
inspection.dispute · POST /inspections/dispute · gate offer · sandbox · answers InspectionDispute@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.disputeRequested@1 · Inspection.disputed@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.dispute({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/dispute \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionDispute@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"dispute": {
"id": "DSP-72deddd6",
"status": "no-grounds"
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"dispute": {
"id": "DSP-72deddd6",
"status": "no-grounds"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}pass
inspection.pass · POST /inspections/pass · gate offer · sandbox · answers InspectionPass@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.passRequested@1 · Inspection.passed@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.pass({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/pass \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionPass@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"result": "passed",
"requestedVerb": "pass"
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"result": "passed",
"requestedVerb": "pass"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}fail
inspection.fail · POST /inspections/fail · gate offer · sandbox · answers InspectionFail@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.failRequested@1 · Inspection.failed@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.fail({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/fail \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionFail@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"result": "passed",
"requestedVerb": "fail"
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"inspectionId": "INSP-850e3583",
"result": "passed",
"requestedVerb": "fail"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
dispatchInspector
inspection.dispatchInspector · POST /inspections/dispatch-inspector · gate offer · sandbox · answers InspectionDispatchInspector@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.dispatchInspectorRequested@1 · Inspection.inspectorDispatched@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.dispatchInspector({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/dispatch-inspector \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionDispatchInspector@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"orderId": "serviceorder_EMVh3MmY1dFQ",
"serviceType": "inspection",
"dispatched": true,
"status": "Dispatched",
"etaMinDays": 1,
"etaMaxDays": 2
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"orderId": "serviceorder_EMVh3MmY1dFQ",
"serviceType": "inspection",
"dispatched": true,
"status": "Dispatched",
"etaMinDays": 1,
"etaMaxDays": 2
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}issueSticker
inspection.issueSticker · POST /inspections/issue-sticker · gate offer · sandbox · answers InspectionIssueSticker@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 — inspection.vin serves this noun on its two routes: / (the landing) · /1C4RJFBG2KC555096 (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 — Inspection.issueStickered@1.
import { inspection } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inspection.issueSticker({"vin":"1C4RJFBG2KC555096"})curl -X POST https://apis.vin/inspections/issue-sticker \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJFBG2KC555096"}'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": "InspectionIssueSticker@1",
"value": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"sticker": {
"issued": true,
"stickerId": "STK-d3d790d1",
"validThrough": "2027-08-31"
}
},
"evidence": {
"vin": "1C4RJFBG2KC555096",
"noun": "inspection",
"asOf": "2026-08-10",
"position": "Passed",
"sticker": {
"issued": true,
"stickerId": "STK-d3d790d1",
"validThrough": "2027-08-31"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "counterparty-logistics-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.
Inspection
Schema
| Property | Type | Notes |
|---|---|---|
id | id | — |
vin | string | — |
type | enum | PPI|MPI|arbitration|leaseReturn|CPO |
location | string | — |
inspectorId | ref→Provider | — |
grade | string | — |
damages | Damage[] | — |
photos | Media[] | — |
status | InspectionFSM | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
vehicle | inspection | 1:0..* | inspected |
inspection | conditionReport | 1:0..1 | produces |
inspection | recon | 1:0..* | triggers |
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.
Inspection · Class model
Inspection · State machine
Inspection · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
incentive
The incentive noun — identity, lifecycle, events, and every capability as an anchored section: 16 capabilities, 5 live, 11 sandbox, 0 declared.
interpreter
The interpreter noun — identity, lifecycle, events, and every capability as an anchored section: 2 capabilities, 0 live, 2 sandbox, 0 declared.