docs.vin

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

Nounappraisal
PillarData (facets: 7 data · 6 services · 3 commerce)
Capabilities16 — 1 live · 15 sandbox · 0 declared
EntitiesAppraisal
Doorsacv.vin · appraisal.vin
SDKVin.appraisal.* from apis.vin
Address/catalog/appraisal#{action} — the anchor IS the wire name minus appraisal.

Lifecycle

AppraisalAppraisalFSM: 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:

Discover & read

read

appraisal.read · GET /appraisals/read · gate none · sandbox · answers AppraisalRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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

FieldTypeRequiredNotes
vinstringyes
lossDatestringyesformat date
zipstringno
mileageintegerno
conditionstringno

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

the SDK — appraisal.get
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"})
GET /appraisals/get
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.

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

FieldTypeRequiredNotes
vinstringno

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

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

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

FieldTypeRequiredNotes
vinstringyes
inspectionstringnoinspection order whose facts move the value basis
mileageintegerno

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.

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

EmitsAppraisal.expired@1 · Appraisal.failed@1 · Appraisal.honored@1 · Appraisal.quoted@1.

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

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — appraisal.value
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"})
GET /appraisals/value
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.

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

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.

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

EmitsAppraisal.requested@1.

the SDK — appraisal.request
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"})
POST /appraisals/request
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.

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

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.

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

EmitsAppraisal.performed@1 · Appraisal.requested@1.

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

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

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.

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

EmitsAppraisal.inspected@1 · Appraisal.requested@1.

the SDK — appraisal.inspect
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"})
POST /appraisals/inspect
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.

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

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.

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

EmitsAppraisal.generated@1.

the SDK — appraisal.generate
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"})
POST /appraisals/generate
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.

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

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.

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

EmitsAppraisal.accepted@1 · Appraisal.failed@1.

the SDK — appraisal.accept
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"})
POST /appraisals/accept
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.

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

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.

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

EmitsAppraisal.expired@1.

the SDK — appraisal.expire
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"})
POST /appraisals/expire
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.

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

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.

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

EmitsAppraisal.allowanceSet@1 · Appraisal.failed@1.

the SDK — appraisal.allowance
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"})
POST /appraisals/allowance
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — appraisal.conditionAdjust
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"})
GET /appraisals/condition-adjust
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — appraisal.equity
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"})
GET /appraisals/equity
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.

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

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.

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

EmitsAppraisal.honored@1.

the SDK — appraisal.honor
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"})
POST /appraisals/honor
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — appraisal.marketComps
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"})
GET /appraisals/market-comps
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

PropertyTypeNotes
ididapr_
vinstring
mileageint
inspectionIdref→Inspection
allowancemoney
valuemoney
statusAppraisalFSM

Relationships

FromToCardinalityAs
dealappraisal1:0..1trade-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.