docs.vin

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

Nounrecon
PillarData (facets: 11 data · 10 services · 7 commerce)
Capabilities28 — 0 live · 28 sandbox · 0 declared
EntitiesReconditioning
Doorsrecon.vin
SDKVin.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:

Discover & read

read

recon.read · GET /recons/read · gate none · sandbox · answers ReconRead@1

FieldTypeRequiredNotes
vinstringno

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

the SDK — recon.read
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"})
GET /recons/read
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — recon.history
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"})
GET /recons/history
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.

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

FieldTypeRequiredNotes
vinstringno

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

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

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

FieldTypeRequiredNotes
vinstringno

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

EmitsRecon.etaUpdated@1.

the SDK — recon.eta
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"})
GET /recons/eta
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.failed@1 · Recon.quoted@1.

the SDK — recon.quote
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"})
POST /recons/quote
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.estimateRequested@1 · Recon.estimated@1.

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

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — recon.costEstimate
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"})
GET /recons/cost-estimate
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.

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

FieldTypeRequiredNotes
vinstringyes
itemsarray<object>yeskeyed to inspection fault IDs
inspectionIdstringno
authoritystringno

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.

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

EmitsRecon.completed@1 · Recon.dispatched@1 · Recon.failed@1 · Recon.ordered@1 · Recon.requested@1 · ServiceOrder.ordered@1 · ServiceOrder.reconditioned@1 · ServiceOrder.settled@1.

the SDK — recon.order
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":[]})
POST /recons/order
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.requested@1 · Recon.scheduleRequested@1 · Recon.scheduled@1.

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

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — recon.stage
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"})
GET /recons/stage
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.dispatched@1 · Recon.requested@1.

the SDK — recon.dispatch
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"})
POST /recons/dispatch
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.advanceStageRequested@1 · Recon.stageAdvanced@1.

the SDK — recon.advanceStage
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"})
POST /recons/advance-stage
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — recon.workflowStage
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"})
GET /recons/workflow-stage
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.failed@1 · Recon.paid@1 · Recon.payFailed@1 · Recon.payRequested@1.

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

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.failed@1 · Recon.invoiceFailed@1 · Recon.invoiceRequested@1 · Recon.invoiced@1.

the SDK — recon.invoice
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"})
POST /recons/invoice
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.chargebackRequested@1 · Recon.chargebacked@1.

the SDK — recon.chargeback
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"})
POST /recons/chargeback
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.performFailed@1 · Recon.performRequested@1 · Recon.performed@1 · Recon.requested@1.

the SDK — recon.perform
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"})
POST /recons/perform
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsInventory.reconditioned@1 · Recon.completeRequested@1 · Recon.completed@1.

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

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.approveRequested@1 · Recon.approved@1.

the SDK — recon.approve
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"})
POST /recons/approve
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.held@1 · Recon.holdRequested@1.

the SDK — recon.hold
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"})
POST /recons/hold
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — recon.bottleneck
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"})
GET /recons/bottleneck
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — recon.cost
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"})
GET /recons/cost
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — recon.cycleTime
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"})
GET /recons/cycle-time
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — recon.daysInRecon
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"})
GET /recons/days-in-recon
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.frontlineRequested@1 · Recon.frontlined@1.

the SDK — recon.frontline
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"})
POST /recons/frontline
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.frontlineReadied@1.

the SDK — recon.frontlineReady
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"})
POST /recons/frontline-ready
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.roOpened@1.

the SDK — recon.openRo
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"})
POST /recons/open-ro
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.

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

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsRecon.routeRequested@1 · Recon.routed@1.

the SDK — recon.route
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"})
POST /recons/route
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.

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

PropertyType
idid
vinstring
inspectionIdref→Inspection
itemsReconItem[]
statusenum

Relationships

FromToCardinalityAs
inspectionrecon1: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.