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
| Noun | listing |
| Pillar | Data (facets: 10 data · 10 services · 3 commerce) |
| Capabilities | 23 — 6 live · 17 sandbox · 0 declared |
| Entities | Listing |
| Doors | aggregator.vin · listings.vin |
| SDK | Vin.listing.* from apis.vin |
| Address | /catalog/listing#{action} — the anchor IS the wire name minus listing. |
Lifecycle
Listing — ListingFSM: 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:
Listing.boosted@1— emitted byboostListing.closed@1— emitted bycloseListing.coListDistributed@1— emitted bycoListDistributeListing.created@1— emitted bycreateListing.distributed@1— emitted bydistributeListing.failed@1— emitted byboost·listFee·successFeeListing.listFeeAssessed@1— emitted bylistFeeListing.paused@1— emitted bypauseListing.priceDropAlerted@1— emitted bypriceDropAlertListing.published@1— emitted bypublishListing.relisted@1— emitted byrelistListing.retracted@1— emitted byretractListing.subscribed@1— emitted bysubscribeListing.successFeeAssessed@1— emitted bysuccessFeeListing.updated@1— emitted byupdate
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).
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — listings.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.
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"})curl 'https://apis.vin/listings/lookup?vin=W1Y4EDHY4NT115660'search
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).
| Field | Type | Required | Notes |
|---|---|---|---|
q | string | no | — |
make | string | no | — |
model | string | no | — |
year | integer | no | — |
zip | string | no | — |
radius | integer | no | — |
priceMin | number | no | — |
priceMax | number | no | — |
facets | array<string> | no | — |
page | integer | no | — |
limit | integer | no | — |
Door — listings.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.
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"})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).
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — listings.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.
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"})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).
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — listings.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.
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"})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.
Door — aggregator.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.
import { listing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await listing.federatedSearch()curl 'https://apis.vin/listings/federated-search'relist
listing.relist · POST /listings/relist · gate offer · sandbox · answers ListingRelist@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.relisted@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.failed@1 · Listing.listFeeAssessed@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.failed@1 · Listing.successFeeAssessed@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.created@1.
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"})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.
{
"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.
Door — aggregator.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.
Emits — Listing.subscribed@1.
import { listing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await listing.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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.published@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.updated@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.closed@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.boosted@1 · Listing.failed@1.
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"})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.
{
"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.
Door — aggregator.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.
Emits — Listing.coListDistributed@1.
import { listing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await listing.coListDistribute()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.
{
"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).
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
Door — listings.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.
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"})curl 'https://apis.vin/listings/detail?vin=W1Y4EDHY4NT115660'distribute
listing.distribute · POST /listings/distribute · gate offer · sandbox · answers ListingDistribute@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.distributed@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — listings.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.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — listings.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.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.paused@1.
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"})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.
{
"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.
Door — aggregator.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.
Emits — Listing.priceDropAlerted@1.
import { listing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await listing.priceDropAlert()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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — listings.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.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — listings.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.
Emits — Listing.retracted@1.
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"})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.
{
"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
| Property | Type | Notes |
|---|---|---|
listingId | id | — |
vin | string | — |
venue | string | abstract |
price | money | — |
odometer | int | — |
photos | Media[] | — |
daysOnLot | int | — |
commercialState | enum | — |
status | ListingFSM | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
vehicle | listing | 1: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.
lenderProgram
The lenderProgram noun — identity, lifecycle, events, and every capability as an anchored section: 9 capabilities, 0 live, 9 sandbox, 0 declared.
load
The load noun — identity, lifecycle, events, and every capability as an anchored section: 21 capabilities, 0 live, 21 sandbox, 0 declared.