recon
The recon noun — identity, lifecycle, events, and every capability as an anchored section: 28 capabilities, 0 live, 28 sandbox, 0 declared.
recon is one of the estate's 317 automotive nouns — a job a car needs done. It carries 28 capabilities: 0 live, 28 sandbox, 0 declared · doors recon.vin.
Identity
| Noun | recon |
| Pillar | Data (facets: 11 data · 10 services · 7 commerce) |
| Capabilities | 28 — 0 live · 28 sandbox · 0 declared |
| Entities | Reconditioning |
| Doors | recon.vin |
| SDK | Vin.recon.* from apis.vin |
| Address | /catalog/recon#{action} — the anchor IS the wire name minus recon. |
Events
The vocabulary this noun can append to the record — 39 past-tense, versioned event types, each linked to the capability that emits it:
Inventory.reconditioned@1— emitted bycompleteRecon.advanceStageRequested@1— emitted byadvanceStageRecon.approveRequested@1— emitted byapproveRecon.approved@1— emitted byapproveRecon.chargebackRequested@1— emitted bychargebackRecon.chargebacked@1— emitted bychargebackRecon.completeRequested@1— emitted bycompleteRecon.completed@1— emitted bycomplete·orderRecon.dispatched@1— emitted bydispatch·orderRecon.estimateRequested@1— emitted byestimateRecon.estimated@1— emitted byestimateRecon.etaUpdated@1— emitted byetaRecon.failed@1— emitted byinvoice·order·pay·quoteRecon.frontlineReadied@1— emitted byfrontlineReadyRecon.frontlineRequested@1— emitted byfrontlineRecon.frontlined@1— emitted byfrontlineRecon.held@1— emitted byholdRecon.holdRequested@1— emitted byholdRecon.invoiceFailed@1— emitted byinvoiceRecon.invoiceRequested@1— emitted byinvoiceRecon.invoiced@1— emitted byinvoiceRecon.ordered@1— emitted byorderRecon.paid@1— emitted bypayRecon.payFailed@1— emitted bypayRecon.payRequested@1— emitted bypayRecon.performFailed@1— emitted byperformRecon.performRequested@1— emitted byperformRecon.performed@1— emitted byperformRecon.quoted@1— emitted byquoteRecon.requested@1— emitted bydispatch·order·perform·scheduleRecon.roOpened@1— emitted byopenRoRecon.routeRequested@1— emitted byrouteRecon.routed@1— emitted byrouteRecon.scheduleRequested@1— emitted byscheduleRecon.scheduled@1— emitted byscheduleRecon.stageAdvanced@1— emitted byadvanceStageServiceOrder.ordered@1— emitted byorderServiceOrder.reconditioned@1— emitted byorderServiceOrder.settled@1— emitted byorder
Discover & read
read
recon.read · GET /recons/read · gate none · sandbox · answers ReconRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.read({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/read?vin=1C6HJTFG4NL182319'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": "ReconRead@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"recon": {
"stage": "intake",
"inRecon": true,
"grade": "fair"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"recon": {
"stage": "intake",
"inRecon": true,
"grade": "fair"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}history
recon.history · GET /recons/history · gate none · sandbox · answers ReconHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.history({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/history?vin=1C6HJTFG4NL182319'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": "ReconHistory@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"events": [
{
"date": "2024-03-14",
"kind": "routine",
"description": "routine reconditioning record"
}
]
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"events": [
{
"date": "2024-03-14",
"kind": "routine",
"description": "routine reconditioning record"
}
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}status
recon.status · GET /recons/status · gate none · sandbox · answers ReconStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.status({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/status?vin=1C6HJTFG4NL182319'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": "ReconStatus@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"orderId": "serviceorder_EMVh3MmY1dFQ",
"serviceType": "recon",
"status": "Dispatched",
"lifecycle": [
"Quoted",
"Pending",
"Active",
"Dispatched"
]
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"orderId": "serviceorder_EMVh3MmY1dFQ",
"serviceType": "recon",
"status": "Dispatched",
"lifecycle": [
"Quoted",
"Pending",
"Active",
"Dispatched"
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}eta
recon.eta · GET /recons/eta · gate key · sandbox · answers ReconEta@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.etaUpdated@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.eta({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/eta?vin=1C6HJTFG4NL182319'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": "ReconEta@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"eta": {
"date": "2026-08-14",
"confidence": "high"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"eta": {
"date": "2026-08-14",
"confidence": "high"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
recon.quote · POST /recons/quote · gate offer · sandbox · answers ReconQuote@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.failed@1 · Recon.quoted@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.quote({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/quote \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconQuote@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"quoteId": "DQ-1",
"serviceType": "recon",
"costCents": 26137,
"priceCents": 33978,
"marginCents": 7841,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 5,
"rush": false,
"expires": "2026-08-17T00:00:00.000Z"
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"quoteId": "DQ-1",
"serviceType": "recon",
"costCents": 26137,
"priceCents": 33978,
"marginCents": 7841,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 5,
"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
}
}estimate
recon.estimate · POST /recons/estimate · gate offer · sandbox · answers ReconEstimate@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.estimateRequested@1 · Recon.estimated@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.estimate({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/estimate \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconEstimate@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"estimateId": "DQ-1",
"serviceType": "recon",
"laborCents": 15682,
"partsCents": 10455,
"subtotalCents": 26137,
"estimateCents": 33978,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 5
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"estimateId": "DQ-1",
"serviceType": "recon",
"laborCents": 15682,
"partsCents": 10455,
"subtotalCents": 26137,
"estimateCents": 33978,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 5
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}costEstimate
recon.costEstimate · GET /recons/cost-estimate · gate key · sandbox · answers ReconCostEstimate@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.costEstimate({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/cost-estimate?vin=1C6HJTFG4NL182319'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": "ReconCostEstimate@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"kind": "recon",
"estimateId": "DQ-1",
"laborCents": 15682,
"partsCents": 10455,
"subtotalCents": 26137,
"estimateCents": 33978,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 5
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"kind": "recon",
"estimateId": "DQ-1",
"laborCents": 15682,
"partsCents": 10455,
"subtotalCents": 26137,
"estimateCents": 33978,
"currency": "USD",
"etaMinDays": 1,
"etaMaxDays": 5
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
order
recon.order · POST /recons/order · gate offer · sandbox · answers ReconOrder@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
items | array<object> | yes | keyed to inspection fault IDs |
inspectionId | 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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.completed@1 · Recon.dispatched@1 · Recon.failed@1 · Recon.ordered@1 · Recon.requested@1 · ServiceOrder.ordered@1 · ServiceOrder.reconditioned@1 · ServiceOrder.settled@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.order({"vin":"1C6HJTFG4NL182319","items":[]})curl -X POST https://apis.vin/recons/order \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319","items":[]}'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": "ReconOrder@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"orderId": "serviceorder_EMVh3MmY1dFQ",
"quoteId": "DQ-1",
"serviceType": "recon",
"status": "Active",
"priceCents": 33978,
"currency": "USD"
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"orderId": "serviceorder_EMVh3MmY1dFQ",
"quoteId": "DQ-1",
"serviceType": "recon",
"status": "Active",
"priceCents": 33978,
"currency": "USD"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}schedule
recon.schedule · POST /recons/schedule · gate offer · sandbox · answers ReconSchedule@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.requested@1 · Recon.scheduleRequested@1 · Recon.scheduled@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.schedule({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/schedule \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconSchedule@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"work": {
"id": "RW-a07d5d8c",
"operation": "schedule",
"status": "scheduleed"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"work": {
"id": "RW-a07d5d8c",
"operation": "schedule",
"status": "scheduleed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}stage
recon.stage · GET /recons/stage · gate none · sandbox · answers ReconStage@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.stage({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/stage?vin=1C6HJTFG4NL182319'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": "ReconStage@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"recon": {
"stage": "intake",
"inRecon": true,
"grade": "fair"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"recon": {
"stage": "intake",
"inRecon": true,
"grade": "fair"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}dispatch
recon.dispatch · POST /recons/dispatch · gate offer · sandbox · answers ReconDispatch@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.dispatched@1 · Recon.requested@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.dispatch({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/dispatch \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconDispatch@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"work": {
"id": "RW-ce7c022b",
"operation": "dispatch",
"status": "dispatched"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"work": {
"id": "RW-ce7c022b",
"operation": "dispatch",
"status": "dispatched"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}advanceStage
recon.advanceStage · POST /recons/advance-stage · gate offer · sandbox · answers ReconAdvanceStage@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.advanceStageRequested@1 · Recon.stageAdvanced@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.advanceStage({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/advance-stage \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconAdvanceStage@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"advance": {
"from": "intake",
"status": "advance-recorded"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"advance": {
"from": "intake",
"status": "advance-recorded"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}workflowStage
recon.workflowStage · GET /recons/workflow-stage · gate key · sandbox · answers ReconWorkflowStage@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.workflowStage({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/workflow-stage?vin=1C6HJTFG4NL182319'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": "ReconWorkflowStage@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"recon": {
"stage": "intake",
"inRecon": true,
"grade": "fair"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"recon": {
"stage": "intake",
"inRecon": true,
"grade": "fair"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
recon.pay · POST /recons/pay · gate offer · sandbox · answers ReconPay@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.failed@1 · Recon.paid@1 · Recon.payFailed@1 · Recon.payRequested@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.pay({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/pay \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconPay@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"payment": {
"id": "PAY-c70bc549",
"status": "settled",
"amountCents": 264000,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"payment": {
"id": "PAY-c70bc549",
"status": "settled",
"amountCents": 264000,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}invoice
recon.invoice · POST /recons/invoice · gate offer · sandbox · answers ReconInvoice@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.failed@1 · Recon.invoiceFailed@1 · Recon.invoiceRequested@1 · Recon.invoiced@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.invoice({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/invoice \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconInvoice@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"invoice": {
"id": "INV-ad90fdd0",
"status": "issued",
"amountCents": 264000,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"invoice": {
"id": "INV-ad90fdd0",
"status": "issued",
"amountCents": 264000,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}chargeback
recon.chargeback · POST /recons/chargeback · gate offer · sandbox · answers ReconChargeback@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.chargebackRequested@1 · Recon.chargebacked@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.chargeback({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/chargeback \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconChargeback@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"chargeback": {
"id": "CBK-f0059fbe",
"status": "no-grounds",
"amountCents": 0,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"chargeback": {
"id": "CBK-f0059fbe",
"status": "no-grounds",
"amountCents": 0,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
perform
recon.perform · POST /recons/perform · gate offer · sandbox · answers ReconPerform@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.performFailed@1 · Recon.performRequested@1 · Recon.performed@1 · Recon.requested@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.perform({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/perform \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconPerform@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"work": {
"id": "RW-5de19d82",
"operation": "perform",
"status": "performed"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"work": {
"id": "RW-5de19d82",
"operation": "perform",
"status": "performed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}complete
recon.complete · POST /recons/complete · gate offer · sandbox · answers ReconComplete@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Inventory.reconditioned@1 · Recon.completeRequested@1 · Recon.completed@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.complete({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/complete \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconComplete@1",
"value": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"completed": true,
"status": "Complete",
"eventName": "ServiceOrder.detailed@1",
"vin": "1C6HJTFG4NL182319",
"serviceType": "recon",
"grade": "clean",
"damage": [],
"reconRequired": false,
"reconEstimateCents": 0,
"currency": "USD"
},
"evidence": {
"orderId": "serviceorder_EMVh3MmY1dFQ",
"completed": true,
"status": "Complete",
"eventName": "ServiceOrder.detailed@1",
"vin": "1C6HJTFG4NL182319",
"serviceType": "recon",
"grade": "clean",
"damage": [],
"reconRequired": false,
"reconEstimateCents": 0,
"currency": "USD"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "field-services-rail-sandbox"
},
"events": [
"Inventory.reconditioned@1"
],
"meter": {
"charged": "0.00",
"posted": false
}
}Authorize & resolve
approve
recon.approve · POST /recons/approve · gate offer · sandbox · answers ReconApprove@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.approveRequested@1 · Recon.approved@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.approve({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/approve \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconApprove@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"approval": {
"status": "approved",
"amountCents": 264000,
"currency": "USD"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"approval": {
"status": "approved",
"amountCents": 264000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}hold
recon.hold · POST /recons/hold · gate offer · sandbox · answers ReconHold@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.held@1 · Recon.holdRequested@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.hold({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/hold \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconHold@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"hold": {
"id": "RH-c3e0c878",
"status": "held"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"hold": {
"id": "RH-c3e0c878",
"status": "held"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
bottleneck
recon.bottleneck · GET /recons/bottleneck · gate none · sandbox · answers ReconBottleneck@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.bottleneck({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/bottleneck?vin=1C6HJTFG4NL182319'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": "ReconBottleneck@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"bottleneck": {
"stage": "none",
"queueDepth": 0
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"bottleneck": {
"stage": "none",
"queueDepth": 0
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}cost
recon.cost · GET /recons/cost · gate none · sandbox · answers ReconCost@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.cost({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/cost?vin=1C6HJTFG4NL182319'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": "ReconCost@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"grade": "fair",
"cost": {
"amountCents": 264000,
"currency": "USD"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"grade": "fair",
"cost": {
"amountCents": 264000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}cycleTime
recon.cycleTime · GET /recons/cycle-time · gate key · sandbox · answers ReconCycleTime@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.cycleTime({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/cycle-time?vin=1C6HJTFG4NL182319'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": "ReconCycleTime@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"cycleDays": 16,
"targetDays": 7
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"cycleDays": 16,
"targetDays": 7
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}daysInRecon
recon.daysInRecon · GET /recons/days-in-recon · gate none · sandbox · answers ReconDaysInRecon@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.daysInRecon({"vin":"1C6HJTFG4NL182319"})curl 'https://apis.vin/recons/days-in-recon?vin=1C6HJTFG4NL182319'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": "ReconDaysInRecon@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"days": 7
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"days": 7
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}frontline
recon.frontline · POST /recons/frontline · gate offer · sandbox · answers ReconFrontline@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.frontlineRequested@1 · Recon.frontlined@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.frontline({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/frontline \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconFrontline@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"frontline": {
"status": "refused",
"reason": "recon-incomplete"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"frontline": {
"status": "refused",
"reason": "recon-incomplete"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}frontlineReady
recon.frontlineReady · POST /recons/frontline-ready · gate offer · sandbox · answers ReconFrontlineReady@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.frontlineReadied@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.frontlineReady({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/frontline-ready \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconFrontlineReady@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"ready": false,
"reason": "recon-incomplete"
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"ready": false,
"reason": "recon-incomplete"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}openRo
recon.openRo · POST /recons/open-ro · gate offer · sandbox · answers ReconOpenRo@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.roOpened@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.openRo({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/open-ro \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconOpenRo@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"roId": "RO-3d13d500",
"status": "opened"
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"roId": "RO-3d13d500",
"status": "opened"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}route
recon.route · POST /recons/route · gate offer · sandbox · answers ReconRoute@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 — recon.vin serves this noun on its two routes: / (the landing) · /1C6HJTFG4NL182319 (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 — Recon.routeRequested@1 · Recon.routed@1.
import { recon } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await recon.route({"vin":"1C6HJTFG4NL182319"})curl -X POST https://apis.vin/recons/route \
-H 'content-type: application/json' \
-d '{"vin":"1C6HJTFG4NL182319"}'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": "ReconRoute@1",
"value": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"work": {
"id": "RW-1191ffde",
"operation": "route",
"status": "routeed"
}
},
"evidence": {
"vin": "1C6HJTFG4NL182319",
"noun": "recon",
"asOf": "2026-08-10",
"stage": "intake",
"work": {
"id": "RW-1191ffde",
"operation": "route",
"status": "routeed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-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.
Reconditioning
Schema
| Property | Type |
|---|---|
id | id |
vin | string |
inspectionId | ref→Inspection |
items | ReconItem[] |
status | enum |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
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.
Recon · Class model
Recon · State machine
Recon · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
recalls
The recalls noun — identity, lifecycle, events, and every capability as an anchored section: 1 capability, 1 live, 0 sandbox, 0 declared.
reconciliation
The reconciliation noun — identity, lifecycle, events, and every capability as an anchored section: 13 capabilities, 0 live, 13 sandbox, 0 declared.