appraisal
The appraisal noun — identity, lifecycle, events, and every capability as an anchored section: 16 capabilities, 1 live, 15 sandbox, 0 declared.
appraisal is one of the estate's 317 automotive nouns — a job a car needs done. It carries 16 capabilities: 1 live, 15 sandbox, 0 declared · doors appraisal.vin · acv.vin.
Identity
| Noun | appraisal |
| Pillar | Data (facets: 7 data · 6 services · 3 commerce) |
| Capabilities | 16 — 1 live · 15 sandbox · 0 declared |
| Entities | Appraisal |
| Doors | acv.vin · appraisal.vin |
| SDK | Vin.appraisal.* from apis.vin |
| Address | /catalog/appraisal#{action} — the anchor IS the wire name minus appraisal. |
Lifecycle
Appraisal — AppraisalFSM: 4 states, 3 transitions — Requested · Quoted · Accepted · Expired. Each transition is a past-tense event on the record.
Events
The vocabulary this noun can append to the record — 10 past-tense, versioned event types, each linked to the capability that emits it:
Appraisal.accepted@1— emitted byacceptAppraisal.allowanceSet@1— emitted byallowanceAppraisal.expired@1— emitted byexpire·quoteAppraisal.failed@1— emitted byaccept·allowance·quoteAppraisal.generated@1— emitted bygenerateAppraisal.honored@1— emitted byhonor·quoteAppraisal.inspected@1— emitted byinspectAppraisal.performed@1— emitted byperformAppraisal.quoted@1— emitted byquoteAppraisal.requested@1— emitted byinspect·perform·request
Discover & read
read
appraisal.read · GET /appraisals/read · gate none · sandbox · answers AppraisalRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.read({"vin":"JF2SJAEC7HH411411"})curl 'https://apis.vin/appraisals/read?vin=JF2SJAEC7HH411411'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": "AppraisalRead@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"desk": {
"standing": "Accepted"
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"desk": {
"standing": "Accepted"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}get
appraisal.get · GET /appraisals/get · gate key · sandbox · answers TotalLossAcv@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
lossDate | string | yes | format date |
zip | string | no | — |
mileage | integer | no | — |
condition | string | no | — |
Door — acv.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.get({"vin":"JF2SJAEC7HH411411","lossDate":"2026-08-09"})curl 'https://apis.vin/appraisals/get?vin=JF2SJAEC7HH411411&lossDate=2026-08-09'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": "TotalLossAcv@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"lossDate": "2026-08-09",
"acv": {
"amount": "4073683",
"currency": "USD"
},
"basis": "retail-average",
"condition": "average",
"mileage": 58677,
"confidence": "medium"
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"lossDate": "2026-08-09",
"acv": {
"amount": "4073683",
"currency": "USD"
},
"basis": "retail-average",
"condition": "average",
"mileage": 58677,
"confidence": "medium"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "valuation-book-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}history
appraisal.history · GET /appraisals/history · gate none · sandbox · answers AppraisalHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.history({"vin":"JF2SJAEC7HH411411"})curl 'https://apis.vin/appraisals/history?vin=JF2SJAEC7HH411411'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": "AppraisalHistory@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"trail": {
"id": "APR-18220cb5",
"entries": [
{
"standing": "Requested",
"at": "2026-08-07"
},
{
"standing": "Quoted",
"at": "2026-08-08"
},
{
"standing": "Accepted",
"at": "2026-08-09"
}
],
"count": 3
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"trail": {
"id": "APR-18220cb5",
"entries": [
{
"standing": "Requested",
"at": "2026-08-07"
},
{
"standing": "Quoted",
"at": "2026-08-08"
},
{
"standing": "Accepted",
"at": "2026-08-09"
}
],
"count": 3
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
appraisal.quote · POST /appraisals/quote · gate offer · sandbox · answers Appraisal@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
inspection | string | no | inspection order whose facts move the value basis |
mileage | integer | 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 — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 — Appraisal.expired@1 · Appraisal.failed@1 · Appraisal.honored@1 · Appraisal.quoted@1.
import { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.quote({"vin":"JF2SJAEC7HH411411"})curl -X POST https://apis.vin/appraisals/quote \
-H 'content-type: application/json' \
-d '{"vin":"JF2SJAEC7HH411411"}'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": "Appraisal@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"quote": {
"status": "quoted",
"id": "APR-18220cb5",
"amountCents": 1850000,
"currency": "USD",
"goodThrough": "2026-08-17",
"basis": "acquisition-figure"
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"quote": {
"status": "quoted",
"id": "APR-18220cb5",
"amountCents": 1850000,
"currency": "USD",
"goodThrough": "2026-08-17",
"basis": "acquisition-figure"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
},
"connect": {
"type": "OFFER",
"kind": "connect",
"reason": "CONNECTION_ABSENT",
"portClass": "auction-market",
"state": "absent",
"url": "https://integrates.vin/connect/auction-market",
"message": "appraisal.quote is live via connection — certified, connect to activate: complete the auction-market link ceremony at https://integrates.vin/connect/auction-market. The credential vault (auth.vin) holds the token, and the same call answers simulated:false — activation is the token, never a deploy."
}
}value
appraisal.value · GET /appraisals/value · gate key · sandbox · answers AppraisalValue@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.value({"vin":"JF2SJAEC7HH411411"})curl 'https://apis.vin/appraisals/value?vin=JF2SJAEC7HH411411'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": "AppraisalValue@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"condition": "good",
"value": {
"amount": "41724.00",
"currency": "USD"
},
"currency": "USD",
"asOf": "2026-08-10"
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"condition": "good",
"value": {
"amount": "41724.00",
"currency": "USD"
},
"currency": "USD",
"asOf": "2026-08-10"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "market-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
request
appraisal.request · POST /appraisals/request · gate offer · sandbox · answers AppraisalRequest@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 — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 — Appraisal.requested@1.
import { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.request({"vin":"JF2SJAEC7HH411411"})curl -X POST https://apis.vin/appraisals/request \
-H 'content-type: application/json' \
-d '{"vin":"JF2SJAEC7HH411411"}'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": "AppraisalRequest@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"request": {
"status": "already-on-file",
"id": "APR-18220cb5",
"standing": "Accepted"
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"request": {
"status": "already-on-file",
"id": "APR-18220cb5",
"standing": "Accepted"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
perform
appraisal.perform · POST /appraisals/perform · gate offer · sandbox · answers AppraisalPerform@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 — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 — Appraisal.performed@1 · Appraisal.requested@1.
import { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.perform({"vin":"JF2SJAEC7HH411411"})curl -X POST https://apis.vin/appraisals/perform \
-H 'content-type: application/json' \
-d '{"vin":"JF2SJAEC7HH411411"}'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": "AppraisalPerform@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"work": {
"status": "performed",
"id": "APR-18220cb5",
"standing": "Accepted"
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"work": {
"status": "performed",
"id": "APR-18220cb5",
"standing": "Accepted"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}inspect
appraisal.inspect · POST /appraisals/inspect · gate offer · sandbox · answers AppraisalInspect@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 — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 — Appraisal.inspected@1 · Appraisal.requested@1.
import { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.inspect({"vin":"JF2SJAEC7HH411411"})curl -X POST https://apis.vin/appraisals/inspect \
-H 'content-type: application/json' \
-d '{"vin":"JF2SJAEC7HH411411"}'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": "AppraisalInspect@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"inspection": {
"id": "INSP-9da344ff",
"grade": "clean",
"status": "inspected"
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"inspection": {
"id": "INSP-9da344ff",
"grade": "clean",
"status": "inspected"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}generate
appraisal.generate · POST /appraisals/generate · gate offer · sandbox · answers AppraisalGenerate@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 — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 — Appraisal.generated@1.
import { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.generate({"vin":"JF2SJAEC7HH411411"})curl -X POST https://apis.vin/appraisals/generate \
-H 'content-type: application/json' \
-d '{"vin":"JF2SJAEC7HH411411"}'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": "AppraisalGenerate@1",
"value": {
"appraisalId": "APR-0ZMAEFD",
"vin": "JF2SJAEC7HH411411",
"condition": "good",
"value": {
"amount": "41724.00",
"currency": "USD"
},
"floor": {
"amount": "36717.00",
"currency": "USD"
},
"ceiling": {
"amount": "45479.00",
"currency": "USD"
},
"conditionAdjustmentPct": 0,
"validForDays": 7,
"validUntil": "2026-08-10",
"basis": "appraisal-basis",
"asOf": "2026-08-10"
},
"evidence": {
"appraisalId": "APR-0ZMAEFD",
"vin": "JF2SJAEC7HH411411",
"condition": "good",
"value": {
"amount": "41724.00",
"currency": "USD"
},
"floor": {
"amount": "36717.00",
"currency": "USD"
},
"ceiling": {
"amount": "45479.00",
"currency": "USD"
},
"conditionAdjustmentPct": 0,
"validForDays": 7,
"validUntil": "2026-08-10",
"basis": "appraisal-basis",
"asOf": "2026-08-10"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "market-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Authorize & resolve
accept
appraisal.accept · POST /appraisals/accept · gate offer · sandbox · answers AppraisalAccept@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 — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 — Appraisal.accepted@1 · Appraisal.failed@1.
import { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.accept({"vin":"JF2SJAEC7HH411411"})curl -X POST https://apis.vin/appraisals/accept \
-H 'content-type: application/json' \
-d '{"vin":"JF2SJAEC7HH411411"}'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": "AppraisalAccept@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"acceptance": {
"status": "already-accepted",
"id": "APR-18220cb5"
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"acceptance": {
"status": "already-accepted",
"id": "APR-18220cb5"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Lifecycle & state
expire
appraisal.expire · POST /appraisals/expire · gate offer · sandbox · answers AppraisalExpire@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 — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 — Appraisal.expired@1.
import { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.expire({"vin":"JF2SJAEC7HH411411"})curl -X POST https://apis.vin/appraisals/expire \
-H 'content-type: application/json' \
-d '{"vin":"JF2SJAEC7HH411411"}'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": "AppraisalExpire@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"expiry": {
"status": "accepted-not-expirable",
"id": "APR-18220cb5"
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"expiry": {
"status": "accepted-not-expirable",
"id": "APR-18220cb5"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
allowance
appraisal.allowance · POST /appraisals/allowance · gate offer · sandbox · answers AppraisalAllowance@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 — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 — Appraisal.allowanceSet@1 · Appraisal.failed@1.
import { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.allowance({"vin":"JF2SJAEC7HH411411"})curl -X POST https://apis.vin/appraisals/allowance \
-H 'content-type: application/json' \
-d '{"vin":"JF2SJAEC7HH411411"}'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": "AppraisalAllowance@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"allowanceQuote": {
"status": "set",
"id": "APR-18220cb5",
"amountCents": 1850000,
"currency": "USD",
"basis": "no-over-allowance-the-appraised-figure"
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"allowanceQuote": {
"status": "set",
"id": "APR-18220cb5",
"amountCents": 1850000,
"currency": "USD",
"basis": "no-over-allowance-the-appraised-figure"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}conditionAdjust
appraisal.conditionAdjust · GET /appraisals/condition-adjust · gate key · sandbox · answers AppraisalConditionAdjust@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.conditionAdjust({"vin":"JF2SJAEC7HH411411"})curl 'https://apis.vin/appraisals/condition-adjust?vin=JF2SJAEC7HH411411'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": "AppraisalConditionAdjust@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"adjustment": {
"grade": "clean",
"adjustmentBps": 0,
"adjustmentCents": 0,
"baseCents": 1850000,
"adjustedCents": 1850000,
"currency": "USD",
"basis": "posted-bps-on-the-acquisition-figure"
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"adjustment": {
"grade": "clean",
"adjustmentBps": 0,
"adjustmentCents": 0,
"baseCents": 1850000,
"adjustedCents": 1850000,
"currency": "USD",
"basis": "posted-bps-on-the-acquisition-figure"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}equity
appraisal.equity · GET /appraisals/equity · gate key · sandbox · answers AppraisalEquity@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.equity({"vin":"JF2SJAEC7HH411411"})curl 'https://apis.vin/appraisals/equity?vin=JF2SJAEC7HH411411'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": "AppraisalEquity@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"value": {
"amount": "41724.00",
"currency": "USD"
},
"payoff": {
"amount": "19394.00",
"currency": "USD"
},
"equity": {
"amount": "22330.00",
"currency": "USD"
},
"position": "positive",
"asOf": "2026-08-10"
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"value": {
"amount": "41724.00",
"currency": "USD"
},
"payoff": {
"amount": "19394.00",
"currency": "USD"
},
"equity": {
"amount": "22330.00",
"currency": "USD"
},
"position": "positive",
"asOf": "2026-08-10"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "market-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}honor
appraisal.honor · POST /appraisals/honor · gate offer · sandbox · answers AppraisalHonor@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 — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (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 — Appraisal.honored@1.
import { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.honor({"vin":"JF2SJAEC7HH411411"})curl -X POST https://apis.vin/appraisals/honor \
-H 'content-type: application/json' \
-d '{"vin":"JF2SJAEC7HH411411"}'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": "AppraisalHonor@1",
"value": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"honor": {
"status": "honored",
"id": "APR-18220cb5",
"amountCents": 1850000,
"currency": "USD",
"goodThrough": "2026-08-17"
}
},
"evidence": {
"vin": "JF2SJAEC7HH411411",
"noun": "appraisal",
"asOf": "2026-08-10",
"id": "APR-18220cb5",
"mileage": 58677,
"inspectionId": "INSP-9da344ff",
"allowance": 1850000,
"value": 1850000,
"status": "Accepted",
"honor": {
"status": "honored",
"id": "APR-18220cb5",
"amountCents": 1850000,
"currency": "USD",
"goodThrough": "2026-08-17"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "acquisition-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}marketComps
appraisal.marketComps · GET /appraisals/market-comps · gate key · live · answers AppraisalMarketComps@1
Promoted — earned its own page: /catalog/appraisal.marketComps (computed on every regen: live on the wire + carries its own stateSet).
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — appraisal.vin serves this noun on its two routes: / (the landing) · /JF2SJAEC7HH411411 (the VIN lens).
Try it — live: answers on the wire today. A sandbox key still selects the deterministic simulated mode — drive the full outcome range with the magic triggers.
import { appraisal } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await appraisal.marketComps({"vin":"JF2SJAEC7HH411411"})curl 'https://apis.vin/appraisals/market-comps?vin=JF2SJAEC7HH411411'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.
Appraisal
Schema
| Property | Type | Notes |
|---|---|---|
id | id | apr_ |
vin | string | — |
mileage | int | — |
inspectionId | ref→Inspection | — |
allowance | money | — |
value | money | — |
status | AppraisalFSM | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
deal | appraisal | 1:0..1 | trade-in |
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.
Appraisal · Class model
Appraisal · 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.
allocation
The allocation noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 0 live, 14 sandbox, 0 declared.
arbitrationInspection
The arbitrationInspection noun — identity, lifecycle, events, and every capability as an anchored section: 11 capabilities, 0 live, 11 sandbox, 0 declared.