docs.vin

listing

The listing noun — identity, lifecycle, events, and every capability as an anchored section: 23 capabilities, 6 live, 17 sandbox, 0 declared.

listing is one of the estate's 317 automotive nouns — a job a car needs done. It carries 23 capabilities: 6 live, 17 sandbox, 0 declared · doors listings.vin · aggregator.vin.

Identity

Nounlisting
PillarData (facets: 10 data · 10 services · 3 commerce)
Capabilities23 — 6 live · 17 sandbox · 0 declared
EntitiesListing
Doorsaggregator.vin · listings.vin
SDKVin.listing.* from apis.vin
Address/catalog/listing#{action} — the anchor IS the wire name minus listing.

Lifecycle

ListingListingFSM: 6 states, 6 transitions — Draft · Posted · Active · Pending · Sold · Withdrawn. Each transition is a past-tense event on the record.

Events

The vocabulary this noun can append to the record — 15 past-tense, versioned event types, each linked to the capability that emits it:

Discover & read

lookup

listing.lookup · GET /listings/lookup · gate none · live · answers ListingLookup@1

Promoted — earned its own page: /catalog/listing.lookup (computed on every regen: live on the wire + carries its own stateSet).

FieldTypeRequiredNotes
vinstringno

Doorlistings.vin serves this noun on its two routes: / (the landing) · /W1Y4EDHY4NT115660 (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 — listing.lookup
import { listing } from 'apis.vin'

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

listing.search · GET /listings/search · gate key · live · answers ListingSearch@1

Promoted — earned its own page: /catalog/listing.search (computed on every regen: live on the wire + carries its own stateSet).

FieldTypeRequiredNotes
qstringno
makestringno
modelstringno
yearintegerno
zipstringno
radiusintegerno
priceMinnumberno
priceMaxnumberno
facetsarray<string>no
pageintegerno
limitintegerno

Doorlistings.vin serves this noun on its two routes: / (the landing) · /W1Y4EDHY4NT115660 (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 — listing.search
import { listing } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await listing.search({"q":"q","make":"make"})
GET /listings/search
curl 'https://apis.vin/listings/search?q=q&make=make'

read

listing.read · GET /listings/read · gate none · live · answers ListingRead@1

Promoted — earned its own page: /catalog/listing.read (computed on every regen: live on the wire + carries its own stateSet).

FieldTypeRequiredNotes
vinstringno

Doorlistings.vin serves this noun on its two routes: / (the landing) · /W1Y4EDHY4NT115660 (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 — listing.read
import { listing } from 'apis.vin'

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

status

listing.status · GET /listings/status · gate none · live · answers ListingStatus@1

Promoted — earned its own page: /catalog/listing.status (computed on every regen: live on the wire + carries its own stateSet).

FieldTypeRequiredNotes
vinstringno

Doorlistings.vin serves this noun on its two routes: / (the landing) · /W1Y4EDHY4NT115660 (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 — listing.status
import { listing } from 'apis.vin'

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

federatedSearch

listing.federatedSearch · GET /listings/federated-search · gate none · live · answers ListingFederatedSearch@1

Promoted — earned its own page: /catalog/listing.federatedSearch (computed on every regen: live on the wire + carries its own stateSet).

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /W1Y4EDHY4NT115660 (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 — listing.federatedSearch
import { listing } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await listing.federatedSearch()
GET /listings/federated-search
curl 'https://apis.vin/listings/federated-search'

relist

listing.relist · POST /listings/relist · gate offer · sandbox · answers ListingRelist@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.

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

EmitsListing.relisted@1.

the SDK — listing.relist
import { listing } from 'apis.vin'

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

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:13.725Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingRelist@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "relisting": {
      "status": "listing-in-flight",
      "id": "LST-fc97986f",
      "position": "Draft"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "relisting": {
      "status": "listing-in-flight",
      "id": "LST-fc97986f",
      "position": "Draft"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

listFee

listing.listFee · POST /listings/list-fee · gate offer · sandbox · answers ListingListFee@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.

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

EmitsListing.failed@1 · Listing.listFeeAssessed@1.

the SDK — listing.listFee
import { listing } from 'apis.vin'

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

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:13.685Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingListFee@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "fee": {
      "id": "LF-44efc7ff",
      "amountCents": 4900,
      "currency": "USD",
      "status": "quoted"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "fee": {
      "id": "LF-44efc7ff",
      "amountCents": 4900,
      "currency": "USD",
      "status": "quoted"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

successFee

listing.successFee · POST /listings/success-fee · gate offer · sandbox · answers ListingSuccessFee@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.

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

EmitsListing.failed@1 · Listing.successFeeAssessed@1.

the SDK — listing.successFee
import { listing } from 'apis.vin'

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

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:13.725Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingSuccessFee@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "fee": {
      "id": "SF-c09687a4",
      "amountCents": 46000,
      "currency": "USD",
      "basis": "sale-price",
      "status": "quoted"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "fee": {
      "id": "SF-c09687a4",
      "amountCents": 46000,
      "currency": "USD",
      "basis": "sale-price",
      "status": "quoted"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

create

listing.create · POST /listings/create · gate offer · sandbox · answers ListingCreate@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.

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

EmitsListing.created@1.

the SDK — listing.create
import { listing } from 'apis.vin'

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

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:13.679Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingCreate@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "listing": {
      "status": "already-listed",
      "id": "LST-fc97986f",
      "position": "Draft"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "listing": {
      "status": "already-listed",
      "id": "LST-fc97986f",
      "position": "Draft"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

subscribe

listing.subscribe · POST /listings/subscribe · gate key · sandbox · answers ListingSubscribe@1

No input — this capability takes no request body.

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

EmitsListing.subscribed@1.

the SDK — listing.subscribe
import { listing } from 'apis.vin'

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

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-16T14:50:09.908Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingSubscribe@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "listing",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "active"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "listing",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "active"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

publish

listing.publish · POST /listings/publish · gate offer · sandbox · answers ListingPublish@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.

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

EmitsListing.published@1.

the SDK — listing.publish
import { listing } from 'apis.vin'

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

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:13.689Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingPublish@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "publication": {
      "status": "published",
      "id": "LST-fc97986f",
      "position": "Active"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "publication": {
      "status": "published",
      "id": "LST-fc97986f",
      "position": "Active"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

update

listing.update · POST /listings/update · gate offer · sandbox · answers ListingUpdate@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.

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

EmitsListing.updated@1.

the SDK — listing.update
import { listing } from 'apis.vin'

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

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:13.725Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingUpdate@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "update": {
      "status": "updated",
      "id": "LST-fc97986f",
      "priceCents": 2300000,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "update": {
      "status": "updated",
      "id": "LST-fc97986f",
      "priceCents": 2300000,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

close

listing.close · POST /listings/close · gate offer · sandbox · answers ListingClose@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.

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

EmitsListing.closed@1.

the SDK — listing.close
import { listing } from 'apis.vin'

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

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:13.679Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingClose@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "closure": {
      "status": "closed",
      "id": "LST-fc97986f",
      "finalPosition": "Withdrawn"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "closure": {
      "status": "closed",
      "id": "LST-fc97986f",
      "finalPosition": "Withdrawn"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

boost

listing.boost · POST /listings/boost · gate offer · sandbox · answers ListingBoost@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.

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

EmitsListing.boosted@1 · Listing.failed@1.

the SDK — listing.boost
import { listing } from 'apis.vin'

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

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:13.676Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingBoost@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "boost": {
      "id": "BS-3c21aa08",
      "amountCents": 9900,
      "currency": "USD",
      "status": "nothing-live-to-boost"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "boost": {
      "id": "BS-3c21aa08",
      "amountCents": 9900,
      "currency": "USD",
      "status": "nothing-live-to-boost"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

coListDistribute

listing.coListDistribute · POST /listings/co-list-distribute · gate key · sandbox · answers ListingCoListDistribute@1

No input — this capability takes no request body.

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

EmitsListing.coListDistributed@1.

the SDK — listing.coListDistribute
import { listing } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await listing.coListDistribute()
POST /listings/co-list-distribute
curl -X POST https://apis.vin/listings/co-list-distribute \
  -H 'content-type: application/json' \
  -d '{}'

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-16T14:50:09.907Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingCoListDistribute@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "listing",
    "asOf": "2026-08-10",
    "distribution": {
      "status": "nothing-live-to-distribute"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "listing",
    "asOf": "2026-08-10",
    "distribution": {
      "status": "nothing-live-to-distribute"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

detail

listing.detail · GET /listings/detail · gate key · live · answers ListingDetail@1

Promoted — earned its own page: /catalog/listing.detail (computed on every regen: live on the wire + carries its own stateSet).

FieldTypeRequiredNotes
vinstringyes

Doorlistings.vin serves this noun on its two routes: / (the landing) · /W1Y4EDHY4NT115660 (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 — listing.detail
import { listing } from 'apis.vin'

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

distribute

listing.distribute · POST /listings/distribute · gate offer · sandbox · answers ListingDistribute@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.

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

EmitsListing.distributed@1.

the SDK — listing.distribute
import { listing } from 'apis.vin'

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

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:13.685Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingDistribute@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "distribution": {
      "status": "nothing-live-to-distribute",
      "position": "Draft"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "distribution": {
      "status": "nothing-live-to-distribute",
      "position": "Draft"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

engagement

listing.engagement · GET /listings/engagement · gate key · sandbox · answers ListingEngagement@1

FieldTypeRequiredNotes
vinstringno

Doorlistings.vin serves this noun on its two routes: / (the landing) · /W1Y4EDHY4NT115660 (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 — listing.engagement
import { listing } from 'apis.vin'

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

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:13.685Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingEngagement@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "engagement": {
      "id": "LST-fc97986f",
      "views": 0,
      "saves": 0,
      "inquiries": 0,
      "position": "Draft"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "engagement": {
      "id": "LST-fc97986f",
      "views": 0,
      "saves": 0,
      "inquiries": 0,
      "position": "Draft"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

marketPosition

listing.marketPosition · GET /listings/market-position · gate key · sandbox · answers ListingMarketPosition@1

FieldTypeRequiredNotes
vinstringno

Doorlistings.vin serves this noun on its two routes: / (the landing) · /W1Y4EDHY4NT115660 (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 — listing.marketPosition
import { listing } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await listing.marketPosition({"vin":"W1Y4EDHY4NT115660"})
GET /listings/market-position
curl 'https://apis.vin/listings/market-position?vin=W1Y4EDHY4NT115660'

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:13.686Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingMarketPosition@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "market": {
      "id": "LST-fc97986f",
      "priceCents": 2300000,
      "currency": "USD",
      "compSetSize": 3,
      "percentile": 33,
      "basis": "fleet-listed-iron"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "market": {
      "id": "LST-fc97986f",
      "priceCents": 2300000,
      "currency": "USD",
      "compSetSize": 3,
      "percentile": 33,
      "basis": "fleet-listed-iron"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

pause

listing.pause · POST /listings/pause · gate offer · sandbox · answers ListingPause@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.

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

EmitsListing.paused@1.

the SDK — listing.pause
import { listing } from 'apis.vin'

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

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:13.686Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingPause@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "pause": {
      "status": "not-active",
      "id": "LST-fc97986f",
      "position": "Draft"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "pause": {
      "status": "not-active",
      "id": "LST-fc97986f",
      "position": "Draft"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

priceDropAlert

listing.priceDropAlert · POST /listings/price-drop-alert · gate key · sandbox · answers ListingPriceDropAlert@1

No input — this capability takes no request body.

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

EmitsListing.priceDropAlerted@1.

the SDK — listing.priceDropAlert
import { listing } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await listing.priceDropAlert()
POST /listings/price-drop-alert
curl -X POST https://apis.vin/listings/price-drop-alert \
  -H 'content-type: application/json' \
  -d '{}'

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-16T14:50:09.908Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingPriceDropAlert@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "listing",
    "asOf": "2026-08-10",
    "alert": {
      "id": "LST-e15977c4",
      "armed": false,
      "thresholdPct": 5
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "listing",
    "asOf": "2026-08-10",
    "alert": {
      "id": "LST-e15977c4",
      "armed": false,
      "thresholdPct": 5
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

reach

listing.reach · GET /listings/reach · gate key · sandbox · answers ListingReach@1

FieldTypeRequiredNotes
vinstringno

Doorlistings.vin serves this noun on its two routes: / (the landing) · /W1Y4EDHY4NT115660 (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 — listing.reach
import { listing } from 'apis.vin'

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

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:13.691Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingReach@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "reach": {
      "impressions": 0,
      "channels": 0,
      "position": "Draft"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "reach": {
      "impressions": 0,
      "channels": 0,
      "position": "Draft"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

retract

listing.retract · POST /listings/retract · gate offer · sandbox · answers ListingRetract@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.

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

EmitsListing.retracted@1.

the SDK — listing.retract
import { listing } from 'apis.vin'

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

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:13.725Z · HTTP 200
{
  "type": "OK",
  "answers": "ListingRetract@1",
  "value": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "retraction": {
      "status": "withdrawn",
      "id": "LST-fc97986f"
    }
  },
  "evidence": {
    "vin": "W1Y4EDHY4NT115660",
    "noun": "listing",
    "asOf": "2026-08-10",
    "retraction": {
      "status": "withdrawn",
      "id": "LST-fc97986f"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "paper-commerce-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.

Listing

Schema

PropertyTypeNotes
listingIdid
vinstring
venuestringabstract
pricemoney
odometerint
photosMedia[]
daysOnLotint
commercialStateenum
statusListingFSM

Relationships

FromToCardinalityAs
vehiclelisting1:0..*listed

Modeled

The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 6 diagrams, rendered from the estate model.

Listing · Class model

Listing · State machine

Listing · Sequence

Listing · Class model

Listing · State machine

Listing · Sequence


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