docs.vin

floorplan

The floorplan noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 0 live, 14 sandbox, 0 declared.

floorplan is one of the estate's 317 automotive nouns — a job a car needs done. It carries 14 capabilities: 0 live, 14 sandbox, 0 declared · doors floorplan.vin.

Identity

Nounfloorplan
PillarCommerce (facets: 5 data · 3 services · 6 commerce)
Capabilities14 — 0 live · 14 sandbox · 0 declared
EntitiesFloorplan
Doorsfloorplan.vin
SDKVin.floorplan.* from apis.vin
Address/catalog/floorplan#{action} — the anchor IS the wire name minus floorplan.

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

status

floorplan.status · GET /floorplans/status · gate key · sandbox · answers FloorplanStatus@1

FieldTypeRequiredNotes
vinstringno
rooftopstringno

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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.

EmitsFloorplan.curtailed@1 · Floorplan.paidOff@1.

the SDK — floorplan.status
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.status({"vin":"JTEAAAAH5MJ020686","rooftop":"rooftop"})
GET /floorplans/status
curl 'https://apis.vin/floorplans/status?vin=JTEAAAAH5MJ020686&rooftop=rooftop'

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:11.824Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanStatus@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "floorplan": {
      "status": "not-floored",
      "position": "INSPECTED"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "floorplan": {
      "status": "not-floored",
      "position": "INSPECTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

availability

floorplan.availability · GET /floorplans/availability · gate key · sandbox · answers FloorplanAvailability@1

FieldTypeRequiredNotes
vinstringno

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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 — floorplan.availability
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.availability({"vin":"JTEAAAAH5MJ020686"})
GET /floorplans/availability
curl 'https://apis.vin/floorplans/availability?vin=JTEAAAAH5MJ020686'

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:11.721Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanAvailability@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "availability": {
      "kind": "floorplan",
      "limitCents": 10000000,
      "usedCents": 2375000,
      "availableCents": 7625000,
      "currency": "USD",
      "open": true
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "availability": {
      "kind": "floorplan",
      "limitCents": 10000000,
      "usedCents": 2375000,
      "availableCents": 7625000,
      "currency": "USD",
      "open": true
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

audit

floorplan.audit · POST /floorplans/audit · gate offer · sandbox · answers FloorplanAudit@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.

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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.

EmitsFloorplan.audited@1.

the SDK — floorplan.audit
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.audit({"vin":"JTEAAAAH5MJ020686"})
POST /floorplans/audit
curl -X POST https://apis.vin/floorplans/audit \
  -H 'content-type: application/json' \
  -d '{"vin":"JTEAAAAH5MJ020686"}'

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:11.715Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanAudit@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "audit": {
      "id": "AUD-3f58f319",
      "dealerId": "DLR-b9066ade",
      "unitsOnLine": 1,
      "present": 1,
      "allPresent": true,
      "units": [
        {
          "vin": "1FL0TFL00RED00000",
          "present": true
        }
      ],
      "basis": "storage-site-law"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "audit": {
      "id": "AUD-3f58f319",
      "dealerId": "DLR-b9066ade",
      "unitsOnLine": 1,
      "present": 1,
      "allPresent": true,
      "units": [
        {
          "vin": "1FL0TFL00RED00000",
          "present": true
        }
      ],
      "basis": "storage-site-law"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

rate

floorplan.rate · GET /floorplans/rate · gate key · sandbox · answers FloorplanRate@1

FieldTypeRequiredNotes
vinstringno

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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 — floorplan.rate
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.rate({"vin":"JTEAAAAH5MJ020686"})
GET /floorplans/rate
curl 'https://apis.vin/floorplans/rate?vin=JTEAAAAH5MJ020686'

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:11.823Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanRate@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "rate": {
      "perDiemCents": 1202,
      "basis": "per-diem",
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "rate": {
      "perDiemCents": 1202,
      "basis": "per-diem",
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

flooringFee

floorplan.flooringFee · POST /floorplans/flooring-fee · gate offer · sandbox · answers FloorplanFlooringFee@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.

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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.

EmitsFloorplan.failed@1 · Floorplan.flooringFeeAssessed@1.

the SDK — floorplan.flooringFee
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.flooringFee({"vin":"JTEAAAAH5MJ020686"})
POST /floorplans/flooring-fee
curl -X POST https://apis.vin/floorplans/flooring-fee \
  -H 'content-type: application/json' \
  -d '{"vin":"JTEAAAAH5MJ020686"}'

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:11.733Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanFlooringFee@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "fee": {
      "amountCents": 9500,
      "currency": "USD",
      "per": "flooring"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "fee": {
      "amountCents": 9500,
      "currency": "USD",
      "per": "flooring"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

enroll

floorplan.enroll · POST /floorplans/enroll · gate offer · sandbox · answers FloorplanEnroll@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.

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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.

EmitsFloorplan.enrolled@1.

the SDK — floorplan.enroll
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.enroll({"vin":"JTEAAAAH5MJ020686"})
POST /floorplans/enroll
curl -X POST https://apis.vin/floorplans/enroll \
  -H 'content-type: application/json' \
  -d '{"vin":"JTEAAAAH5MJ020686"}'

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:11.733Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanEnroll@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "enrollment": {
      "status": "enrolled",
      "dealerId": "DLR-b9066ade",
      "dealer": "The Estate Store",
      "line": {
        "kind": "floorplan",
        "limitCents": 10000000,
        "usedCents": 2375000,
        "availableCents": 7625000,
        "currency": "USD"
      }
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "enrollment": {
      "status": "enrolled",
      "dealerId": "DLR-b9066ade",
      "dealer": "The Estate Store",
      "line": {
        "kind": "floorplan",
        "limitCents": 10000000,
        "usedCents": 2375000,
        "availableCents": 7625000,
        "currency": "USD"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

release

floorplan.release · POST /floorplans/release · gate offer · sandbox · answers FloorplanRelease@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.

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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.

EmitsFloorplan.released@1.

the SDK — floorplan.release
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.release({"vin":"JTEAAAAH5MJ020686"})
POST /floorplans/release
curl -X POST https://apis.vin/floorplans/release \
  -H 'content-type: application/json' \
  -d '{"vin":"JTEAAAAH5MJ020686"}'

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:11.824Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanRelease@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "release": {
      "status": "not-floored",
      "position": "INSPECTED"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "release": {
      "status": "not-floored",
      "position": "INSPECTED"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

aging

floorplan.aging · GET /floorplans/aging · gate key · sandbox · answers FloorplanAging@1

FieldTypeRequiredNotes
vinstringno

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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 — floorplan.aging
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.aging({"vin":"JTEAAAAH5MJ020686"})
GET /floorplans/aging
curl 'https://apis.vin/floorplans/aging?vin=JTEAAAAH5MJ020686'

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:11.712Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanAging@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "aging": {
      "stockNumber": "STK-dc321e4e",
      "ageDays": 23,
      "bucket": "watch",
      "agedMark": 30
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "aging": {
      "stockNumber": "STK-dc321e4e",
      "ageDays": 23,
      "bucket": "watch",
      "agedMark": 30
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

curtail

floorplan.curtail · POST /floorplans/curtail · gate offer · sandbox · answers FloorplanCurtail@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.

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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.

EmitsFloorplan.curtailed@1 · Floorplan.failed@1.

the SDK — floorplan.curtail
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.curtail({"vin":"JTEAAAAH5MJ020686"})
POST /floorplans/curtail
curl -X POST https://apis.vin/floorplans/curtail \
  -H 'content-type: application/json' \
  -d '{"vin":"JTEAAAAH5MJ020686"}'

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:11.732Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanCurtail@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "curtailment": {
      "status": "not-floored",
      "position": "INSPECTED"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "curtailment": {
      "status": "not-floored",
      "position": "INSPECTED"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

curtailmentDue

floorplan.curtailmentDue · GET /floorplans/curtailment-due · gate key · sandbox · answers FloorplanCurtailmentDue@1

FieldTypeRequiredNotes
vinstringno

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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 — floorplan.curtailmentDue
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.curtailmentDue({"vin":"JTEAAAAH5MJ020686"})
GET /floorplans/curtailment-due
curl 'https://apis.vin/floorplans/curtailment-due?vin=JTEAAAAH5MJ020686'

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:11.733Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanCurtailmentDue@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "curtailment": {
      "status": "not-floored",
      "position": "INSPECTED"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "curtailment": {
      "status": "not-floored",
      "position": "INSPECTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

draw

floorplan.draw · POST /floorplans/draw · gate offer · sandbox · answers FloorplanDraw@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.

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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.

EmitsFloorplan.drawn@1 · Floorplan.failed@1.

the SDK — floorplan.draw
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.draw({"vin":"JTEAAAAH5MJ020686"})
POST /floorplans/draw
curl -X POST https://apis.vin/floorplans/draw \
  -H 'content-type: application/json' \
  -d '{"vin":"JTEAAAAH5MJ020686"}'

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:11.733Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanDraw@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "draw": {
      "status": "not-yet-floored",
      "position": "INSPECTED"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "draw": {
      "status": "not-yet-floored",
      "position": "INSPECTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

interestAccrue

floorplan.interestAccrue · POST /floorplans/interest-accrue · gate offer · sandbox · answers FloorplanInterestAccrue@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.

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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.

EmitsFloorplan.failed@1 · Floorplan.interestAccrued@1.

the SDK — floorplan.interestAccrue
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.interestAccrue({"vin":"JTEAAAAH5MJ020686"})
POST /floorplans/interest-accrue
curl -X POST https://apis.vin/floorplans/interest-accrue \
  -H 'content-type: application/json' \
  -d '{"vin":"JTEAAAAH5MJ020686"}'

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:11.822Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanInterestAccrue@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "floorplan": {
      "floored": false,
      "perDiemCents": 0,
      "accruedCents": 0,
      "principalCents": 0,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "floorplan": {
      "floored": false,
      "perDiemCents": 0,
      "accruedCents": 0,
      "principalCents": 0,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

line

floorplan.line · GET /floorplans/line · gate key · sandbox · answers FloorplanLine@1

FieldTypeRequiredNotes
vinstringno

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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 — floorplan.line
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.line({"vin":"JTEAAAAH5MJ020686"})
GET /floorplans/line
curl 'https://apis.vin/floorplans/line?vin=JTEAAAAH5MJ020686'

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:11.823Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanLine@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "line": {
      "kind": "floorplan",
      "limitCents": 10000000,
      "usedCents": 2375000,
      "availableCents": 7625000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "line": {
      "kind": "floorplan",
      "limitCents": 10000000,
      "usedCents": 2375000,
      "availableCents": 7625000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

payoff

floorplan.payoff · POST /floorplans/payoff · gate offer · sandbox · answers FloorplanPayoff@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.

Doorfloorplan.vin serves this noun on its two routes: / (the landing) · /JTEAAAAH5MJ020686 (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.

EmitsFloorplan.failed@1 · Floorplan.payoffQuoted@1.

the SDK — floorplan.payoff
import { floorplan } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await floorplan.payoff({"vin":"JTEAAAAH5MJ020686"})
POST /floorplans/payoff
curl -X POST https://apis.vin/floorplans/payoff \
  -H 'content-type: application/json' \
  -d '{"vin":"JTEAAAAH5MJ020686"}'

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:11.823Z · HTTP 200
{
  "type": "OK",
  "answers": "FloorplanPayoff@1",
  "value": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "payoff": {
      "status": "not-floored",
      "position": "INSPECTED"
    }
  },
  "evidence": {
    "vin": "JTEAAAAH5MJ020686",
    "noun": "floorplan",
    "asOf": "2026-08-10",
    "payoff": {
      "status": "not-floored",
      "position": "INSPECTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-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.

Floorplan

Schema

PropertyType
vinstring
flooredDatedate
daysOnLineint
curtailmentDuemoney
payoffmoney

Relationships

FromToCardinalityAs
inventoryfloorplan1:0..1floored

Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.