diagnostic
The diagnostic noun — identity, lifecycle, events, and every capability as an anchored section: 21 capabilities, 0 live, 21 sandbox, 0 declared.
diagnostic is one of the estate's 317 automotive nouns — a job a car needs done. It carries 21 capabilities: 0 live, 21 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | diagnostic |
| Pillar | Data (facets: 10 data · 7 services · 4 commerce) |
| Capabilities | 21 — 0 live · 21 sandbox · 0 declared |
| Entities | RepairOrder |
| Doors | aggregator.vin |
| SDK | Vin.diagnostic.* from apis.vin |
| Address | /catalog/diagnostic#{action} — the anchor IS the wire name minus diagnostic. |
Events
The vocabulary this noun can append to the record — 30 past-tense, versioned event types, each linked to the capability that emits it:
Diagnostic.charged@1— emitted bypayDiagnostic.clearCodesRequested@1— emitted byclearCodesDiagnostic.codesCleared@1— emitted byclearCodesDiagnostic.completed@1— emitted byorderDiagnostic.creditTowardRepairFailed@1— emitted bycreditTowardRepairDiagnostic.creditTowardRepairRequested@1— emitted bycreditTowardRepairDiagnostic.creditedTowardRepair@1— emitted bycreditTowardRepairDiagnostic.dispatched@1— emitted byorderDiagnostic.dtcDecoded@1— emitted bydtcDecodeDiagnostic.ordered@1— emitted byorderDiagnostic.paid@1— emitted bypayDiagnostic.payFailed@1— emitted bypayDiagnostic.payRequested@1— emitted bypayDiagnostic.performFailed@1— emitted byperformDiagnostic.performRequested@1— emitted byperformDiagnostic.performed@1— emitted byperformDiagnostic.pinpointRequested@1— emitted bypinpointDiagnostic.pinpointed@1— emitted bypinpointDiagnostic.quoteRequested@1— emitted byquoteDiagnostic.quoted@1— emitted byquoteDiagnostic.reproduceRequested@1— emitted byreproduceDiagnostic.reproduced@1— emitted byreproduceDiagnostic.roadTestRequested@1— emitted byroadTestDiagnostic.roadTested@1— emitted byroadTestDiagnostic.scanned@1— emitted byscanDiagnostic.scheduleRequested@1— emitted byscheduleDiagnostic.scheduled@1— emitted byscheduleDiagnostic.symptomMatched@1— emitted bysymptomMatchOrder.placed@1— emitted byorderServiceOrder.settled@1— emitted byorder·pay
Discover & read
history
diagnostic.history · GET /diagnostics/history · gate none · sandbox · answers DiagnosticHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.history({"vin":"JN1BJ1CVXLW550653"})curl 'https://apis.vin/diagnostics/history?vin=JN1BJ1CVXLW550653'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": "DiagnosticHistory@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"events": [
{
"date": "2024-03-14",
"kind": "routine",
"description": "routine diagnostic scan record"
},
{
"date": "2024-11-02",
"kind": "routine",
"description": "routine diagnostic scan record"
}
]
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"events": [
{
"date": "2024-03-14",
"kind": "routine",
"description": "routine diagnostic scan record"
},
{
"date": "2024-11-02",
"kind": "routine",
"description": "routine diagnostic scan record"
}
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}scan
diagnostic.scan · POST /diagnostics/scan · gate offer · sandbox · answers DiagnosticScan@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.scanned@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.scan({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/scan \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticScan@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"scan": {
"id": "SCAN-38f091e7",
"status": "performed",
"codes": [],
"systems": [
{
"system": "engine",
"verdict": "pass"
},
{
"system": "transmission",
"verdict": "pass"
},
{
"system": "driveline",
"verdict": "pass"
},
{
"system": "cooling",
"verdict": "pass"
},
{
"system": "electrical",
"verdict": "pass"
},
{
"system": "fuelSystem",
"verdict": "pass"
}
]
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"scan": {
"id": "SCAN-38f091e7",
"status": "performed",
"codes": [],
"systems": [
{
"system": "engine",
"verdict": "pass"
},
{
"system": "transmission",
"verdict": "pass"
},
{
"system": "driveline",
"verdict": "pass"
},
{
"system": "cooling",
"verdict": "pass"
},
{
"system": "electrical",
"verdict": "pass"
},
{
"system": "fuelSystem",
"verdict": "pass"
}
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}predict
diagnostic.predict · GET /diagnostics/predict · gate key · sandbox · answers DiagnosticPredict@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.predict({"vin":"JN1BJ1CVXLW550653"})curl 'https://apis.vin/diagnostics/predict?vin=JN1BJ1CVXLW550653'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": "DiagnosticPredict@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"prediction": {
"failureRisk": "low",
"horizonDays": 180
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"prediction": {
"failureRisk": "low",
"horizonDays": 180
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}tsbLookup
diagnostic.tsbLookup · GET /diagnostics/tsb-lookup · gate none · sandbox · answers DiagnosticTsbLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.tsbLookup({"vin":"JN1BJ1CVXLW550653"})curl 'https://apis.vin/diagnostics/tsb-lookup?vin=JN1BJ1CVXLW550653'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": "DiagnosticTsbLookup@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"bulletins": [
{
"id": "TSB-0b7be309",
"subject": "general service bulletin"
}
]
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"bulletins": [
{
"id": "TSB-0b7be309",
"subject": "general service bulletin"
}
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}dtcRead
diagnostic.dtcRead · GET /diagnostics/dtc-read · gate none · sandbox · answers DiagnosticDtcRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.dtcRead({"vin":"JN1BJ1CVXLW550653"})curl 'https://apis.vin/diagnostics/dtc-read?vin=JN1BJ1CVXLW550653'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": "DiagnosticDtcRead@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"scanId": "SCAN-38f091e7",
"codes": [],
"count": 0
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"scanId": "SCAN-38f091e7",
"codes": [],
"count": 0
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}freezeFrameRead
diagnostic.freezeFrameRead · GET /diagnostics/freeze-frame-read · gate none · sandbox · answers DiagnosticFreezeFrameRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.freezeFrameRead({"vin":"JN1BJ1CVXLW550653"})curl 'https://apis.vin/diagnostics/freeze-frame-read?vin=JN1BJ1CVXLW550653'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": "DiagnosticFreezeFrameRead@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"freezeFrame": {
"available": false,
"reason": "no-stored-fault"
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"freezeFrame": {
"available": false,
"reason": "no-stored-fault"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}readinessRead
diagnostic.readinessRead · GET /diagnostics/readiness-read · gate none · sandbox · answers DiagnosticReadinessRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.readinessRead({"vin":"JN1BJ1CVXLW550653"})curl 'https://apis.vin/diagnostics/readiness-read?vin=JN1BJ1CVXLW550653'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": "DiagnosticReadinessRead@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"monitors": [
{
"monitor": "engine",
"ready": true
},
{
"monitor": "transmission",
"ready": true
},
{
"monitor": "driveline",
"ready": true
},
{
"monitor": "cooling",
"ready": true
},
{
"monitor": "electrical",
"ready": true
},
{
"monitor": "fuelSystem",
"ready": true
}
],
"allReady": true
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"monitors": [
{
"monitor": "engine",
"ready": true
},
{
"monitor": "transmission",
"ready": true
},
{
"monitor": "driveline",
"ready": true
},
{
"monitor": "cooling",
"ready": true
},
{
"monitor": "electrical",
"ready": true
},
{
"monitor": "fuelSystem",
"ready": true
}
],
"allReady": true
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}dtcDecode
diagnostic.dtcDecode · GET /diagnostics/dtc-decode · gate key · sandbox · answers DiagnosticDtcDecode@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.dtcDecoded@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.dtcDecode({"vin":"JN1BJ1CVXLW550653"})curl 'https://apis.vin/diagnostics/dtc-decode?vin=JN1BJ1CVXLW550653'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": "DiagnosticDtcDecode@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"code": "",
"decoded": {
"status": "no-stored-codes"
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"code": "",
"decoded": {
"status": "no-stored-codes"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}symptomMatch
diagnostic.symptomMatch · GET /diagnostics/symptom-match · gate none · sandbox · answers DiagnosticSymptomMatch@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.symptomMatched@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.symptomMatch({"vin":"JN1BJ1CVXLW550653"})curl 'https://apis.vin/diagnostics/symptom-match?vin=JN1BJ1CVXLW550653'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": "DiagnosticSymptomMatch@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"match": {
"status": "no-fault-found"
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"match": {
"status": "no-fault-found"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
diagnostic.quote · POST /diagnostics/quote · gate offer · sandbox · answers DiagnosticQuote@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.quoteRequested@1 · Diagnostic.quoted@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.quote({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/quote \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticQuote@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"quote": {
"id": "DQ-bde5a006",
"amountCents": 18500,
"currency": "USD",
"status": "extended"
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"quote": {
"id": "DQ-bde5a006",
"amountCents": 18500,
"currency": "USD",
"status": "extended"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
order
diagnostic.order · POST /diagnostics/order · gate offer · sandbox · answers DiagnosticOrder@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.completed@1 · Diagnostic.dispatched@1 · Diagnostic.ordered@1 · Order.placed@1 · ServiceOrder.settled@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.order({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/order \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticOrder@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"order": {
"id": "ORD-55c17902",
"service": "diagnostic scan",
"status": "placed",
"amountCents": 18500,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"order": {
"id": "ORD-55c17902",
"service": "diagnostic scan",
"status": "placed",
"amountCents": 18500,
"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
}
}schedule
diagnostic.schedule · POST /diagnostics/schedule · gate offer · sandbox · answers DiagnosticSchedule@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.scheduleRequested@1 · Diagnostic.scheduled@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.schedule({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/schedule \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticSchedule@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"appointment": {
"id": "AP-7b463baf",
"date": "2026-08-12",
"status": "scheduled"
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"appointment": {
"id": "AP-7b463baf",
"date": "2026-08-12",
"status": "scheduled"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
diagnostic.pay · POST /diagnostics/pay · gate offer · sandbox · answers DiagnosticPay@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.charged@1 · Diagnostic.paid@1 · Diagnostic.payFailed@1 · Diagnostic.payRequested@1 · ServiceOrder.settled@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.pay({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/pay \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticPay@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"payment": {
"id": "PAY-042b966c",
"status": "settled",
"amountCents": 18500,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"payment": {
"id": "PAY-042b966c",
"status": "settled",
"amountCents": 18500,
"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
diagnostic.perform · POST /diagnostics/perform · gate offer · sandbox · answers DiagnosticPerform@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.performFailed@1 · Diagnostic.performRequested@1 · Diagnostic.performed@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.perform({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/perform \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticPerform@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"scan": {
"id": "SCAN-38f091e7",
"status": "performed",
"codes": [],
"systems": [
{
"system": "engine",
"verdict": "pass"
},
{
"system": "transmission",
"verdict": "pass"
},
{
"system": "driveline",
"verdict": "pass"
},
{
"system": "cooling",
"verdict": "pass"
},
{
"system": "electrical",
"verdict": "pass"
},
{
"system": "fuelSystem",
"verdict": "pass"
}
]
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"scan": {
"id": "SCAN-38f091e7",
"status": "performed",
"codes": [],
"systems": [
{
"system": "engine",
"verdict": "pass"
},
{
"system": "transmission",
"verdict": "pass"
},
{
"system": "driveline",
"verdict": "pass"
},
{
"system": "cooling",
"verdict": "pass"
},
{
"system": "electrical",
"verdict": "pass"
},
{
"system": "fuelSystem",
"verdict": "pass"
}
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}creditTowardRepair
diagnostic.creditTowardRepair · POST /diagnostics/credit-toward-repair · gate offer · sandbox · answers DiagnosticCreditTowardRepair@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.creditTowardRepairFailed@1 · Diagnostic.creditTowardRepairRequested@1 · Diagnostic.creditedTowardRepair@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.creditTowardRepair({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/credit-toward-repair \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticCreditTowardRepair@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"credit": {
"credited": false,
"amountCents": 0,
"currency": "USD",
"reason": "no-fault-found"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"credit": {
"credited": false,
"amountCents": 0,
"currency": "USD",
"reason": "no-fault-found"
},
"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
}
}More actions
clearCodes
diagnostic.clearCodes · POST /diagnostics/clear-codes · gate offer · sandbox · answers DiagnosticClearCodes@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.clearCodesRequested@1 · Diagnostic.codesCleared@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.clearCodes({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/clear-codes \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticClearCodes@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"clear": {
"status": "cleared",
"willReturn": false
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"clear": {
"status": "cleared",
"willReturn": false
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}freezeFrame
diagnostic.freezeFrame · GET /diagnostics/freeze-frame · gate none · sandbox · answers DiagnosticFreezeFrame@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.freezeFrame({"vin":"JN1BJ1CVXLW550653"})curl 'https://apis.vin/diagnostics/freeze-frame?vin=JN1BJ1CVXLW550653'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": "DiagnosticFreezeFrame@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"freezeFrame": {
"available": false,
"reason": "no-stored-fault"
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"freezeFrame": {
"available": false,
"reason": "no-stored-fault"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}liveData
diagnostic.liveData · GET /diagnostics/live-data · gate none · sandbox · answers DiagnosticLiveData@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.liveData({"vin":"JN1BJ1CVXLW550653"})curl 'https://apis.vin/diagnostics/live-data?vin=JN1BJ1CVXLW550653'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": "DiagnosticLiveData@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"live": {
"rpm": 770,
"coolantTempC": 95,
"voltageTenths": 138
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"live": {
"rpm": 770,
"coolantTempC": 95,
"voltageTenths": 138
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}pinpoint
diagnostic.pinpoint · POST /diagnostics/pinpoint · gate offer · sandbox · answers DiagnosticPinpoint@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.pinpointRequested@1 · Diagnostic.pinpointed@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.pinpoint({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/pinpoint \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticPinpoint@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"match": {
"status": "no-fault-found"
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"match": {
"status": "no-fault-found"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}reproduce
diagnostic.reproduce · POST /diagnostics/reproduce · gate offer · sandbox · answers DiagnosticReproduce@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.reproduceRequested@1 · Diagnostic.reproduced@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.reproduce({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/reproduce \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticReproduce@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"test": {
"id": "RT-efe494a9",
"reproduced": false
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"test": {
"id": "RT-efe494a9",
"reproduced": false
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "shop-arc-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}roadTest
diagnostic.roadTest · POST /diagnostics/road-test · gate offer · sandbox · answers DiagnosticRoadTest@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /JN1BJ1CVXLW550653 (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 — Diagnostic.roadTestRequested@1 · Diagnostic.roadTested@1.
import { diagnostic } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await diagnostic.roadTest({"vin":"JN1BJ1CVXLW550653"})curl -X POST https://apis.vin/diagnostics/road-test \
-H 'content-type: application/json' \
-d '{"vin":"JN1BJ1CVXLW550653"}'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": "DiagnosticRoadTest@1",
"value": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"test": {
"id": "RT-508ef91c",
"reproduced": false
}
},
"evidence": {
"vin": "JN1BJ1CVXLW550653",
"noun": "diagnostic",
"asOf": "2026-08-10",
"verdict": "pass",
"test": {
"id": "RT-508ef91c",
"reproduced": false
}
},
"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.
RepairOrder
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 2 diagrams, rendered from the estate model.
Diagnostic · Class model
Diagnostic · State machine
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
depreciation
The depreciation noun — identity, lifecycle, events, and every capability as an anchored section: 6 capabilities, 0 live, 6 sandbox, 0 declared.
dimensions
The dimensions noun — identity, lifecycle, events, and every capability as an anchored section: 1 capability, 1 live, 0 sandbox, 0 declared.