docs.vin

merchandising

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

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

Identity

Nounmerchandising
PillarServices (facets: 5 data · 7 services · 1 commerce)
Capabilities13 — 0 live · 13 sandbox · 0 declared
EntitiesListing
Doorsaggregator.vin
SDKVin.merchandising.* from apis.vin
Address/catalog/merchandising#{action} — the anchor IS the wire name minus merchandising.

Events

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

Discover & read

read

merchandising.read · GET /merchandisings/read · gate none · sandbox · answers MerchandisingRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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:14.186Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingRead@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "merchandising": {
      "listingId": "LST-a55104df",
      "position": "Draft",
      "priceCents": 2300000,
      "currency": "USD",
      "badges": [
        "condition-clean",
        "no-accident-story"
      ],
      "completeness": 80
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "merchandising": {
      "listingId": "LST-a55104df",
      "position": "Draft",
      "priceCents": 2300000,
      "currency": "USD",
      "badges": [
        "condition-clean",
        "no-accident-story"
      ],
      "completeness": 80
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

photoCapture

merchandising.photoCapture · POST /merchandisings/photo-capture · gate offer · sandbox · answers MerchandisingPhotoCapture@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.

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

EmitsMerchandising.photosCaptured@1.

the SDK — merchandising.photoCapture
import { merchandising } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await merchandising.photoCapture({"vin":"1C4RJFBG3NC166035"})
POST /merchandisings/photo-capture
curl -X POST https://apis.vin/merchandisings/photo-capture \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4RJFBG3NC166035"}'

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:14.183Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingPhotoCapture@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "set": {
      "id": "PH-8c9a5ebd",
      "status": "captured",
      "shots": 12,
      "plan": {
        "exterior": 8,
        "interior": 4,
        "damage": 0
      },
      "grade": "clean"
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "set": {
      "id": "PH-8c9a5ebd",
      "status": "captured",
      "shots": 12,
      "plan": {
        "exterior": 8,
        "interior": 4,
        "damage": 0
      },
      "grade": "clean"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

publish

merchandising.publish · POST /merchandisings/publish · gate offer · sandbox · answers MerchandisingPublish@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.

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

EmitsMerchandising.published@1.

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

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

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:14.184Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingPublish@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "publication": {
      "status": "published",
      "id": "LST-a55104df",
      "position": "Active"
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "publication": {
      "status": "published",
      "id": "LST-a55104df",
      "position": "Active"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

badge

merchandising.badge · POST /merchandisings/badge · gate offer · sandbox · answers MerchandisingBadge@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.

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

EmitsMerchandising.badged@1.

the SDK — merchandising.badge
import { merchandising } from 'apis.vin'

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

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:14.173Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingBadge@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "badging": {
      "status": "badged",
      "listingId": "LST-a55104df",
      "badges": [
        "condition-clean",
        "no-accident-story"
      ]
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "badging": {
      "status": "badged",
      "listingId": "LST-a55104df",
      "badges": [
        "condition-clean",
        "no-accident-story"
      ]
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

boost

merchandising.boost · POST /merchandisings/boost · gate offer · sandbox · answers MerchandisingBoost@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.

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

EmitsMerchandising.boosted@1 · Merchandising.failed@1.

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

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

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:14.176Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingBoost@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "boost": {
      "id": "BS-63cfc578",
      "amountCents": 9900,
      "currency": "USD",
      "status": "nothing-live-to-boost"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "boost": {
      "id": "BS-63cfc578",
      "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": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

completeness

merchandising.completeness · GET /merchandisings/completeness · gate key · sandbox · answers MerchandisingCompleteness@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await merchandising.completeness({"vin":"1C4RJFBG3NC166035"})
GET /merchandisings/completeness
curl 'https://apis.vin/merchandisings/completeness?vin=1C4RJFBG3NC166035'

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:14.183Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingCompleteness@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "completeness": {
      "score": 80,
      "items": {
        "photos": true,
        "spin": true,
        "description": true,
        "price": true,
        "published": false
      }
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "completeness": {
      "score": 80,
      "items": {
        "photos": true,
        "spin": true,
        "description": true,
        "price": true,
        "published": false
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

describe

merchandising.describe · POST /merchandisings/describe · gate offer · sandbox · answers MerchandisingDescribe@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.

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

EmitsMerchandising.described@1.

the SDK — merchandising.describe
import { merchandising } from 'apis.vin'

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

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:14.183Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingDescribe@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "description": {
      "status": "described",
      "listingId": "LST-a55104df",
      "grade": "clean",
      "copy": "Clean-graded unit: full walk-around set, no damage panels to disclose."
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "description": {
      "status": "described",
      "listingId": "LST-a55104df",
      "grade": "clean",
      "copy": "Clean-graded unit: full walk-around set, no damage panels to disclose."
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

engagement

merchandising.engagement · GET /merchandisings/engagement · gate key · sandbox · answers MerchandisingEngagement@1

FieldTypeRequiredNotes
vinstringno

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

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

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:14.183Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingEngagement@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "engagement": {
      "id": "LST-a55104df",
      "views": 0,
      "saves": 0,
      "inquiries": 0,
      "position": "Draft"
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "engagement": {
      "id": "LST-a55104df",
      "views": 0,
      "saves": 0,
      "inquiries": 0,
      "position": "Draft"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

marketPosition

merchandising.marketPosition · GET /merchandisings/market-position · gate key · sandbox · answers MerchandisingMarketPosition@1

FieldTypeRequiredNotes
vinstringno

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

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

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

refresh

merchandising.refresh · POST /merchandisings/refresh · gate offer · sandbox · answers MerchandisingRefresh@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.

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

EmitsMerchandising.refreshed@1.

the SDK — merchandising.refresh
import { merchandising } from 'apis.vin'

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

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:14.191Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingRefresh@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "refresh": {
      "status": "nothing-live-to-refresh",
      "id": "LST-a55104df",
      "position": "Draft"
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "refresh": {
      "status": "nothing-live-to-refresh",
      "id": "LST-a55104df",
      "position": "Draft"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

spin

merchandising.spin · POST /merchandisings/spin · gate offer · sandbox · answers MerchandisingSpin@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.

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

EmitsMerchandising.spun@1.

the SDK — merchandising.spin
import { merchandising } from 'apis.vin'

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

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:14.200Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingSpin@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "spin": {
      "id": "SPIN-a1e1ae9b",
      "status": "captured",
      "frames": 36
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "spin": {
      "id": "SPIN-a1e1ae9b",
      "status": "captured",
      "frames": 36
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

views

merchandising.views · GET /merchandisings/views · gate key · sandbox · answers MerchandisingViews@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await merchandising.views({"vin":"1C4RJFBG3NC166035"})
GET /merchandisings/views
curl 'https://apis.vin/merchandisings/views?vin=1C4RJFBG3NC166035'

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:14.202Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingViews@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "views": {
      "id": "LST-a55104df",
      "views": 0,
      "position": "Draft"
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "views": {
      "id": "LST-a55104df",
      "views": 0,
      "position": "Draft"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

windowSticker

merchandising.windowSticker · POST /merchandisings/window-sticker · gate offer · sandbox · answers MerchandisingWindowSticker@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.

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

EmitsMerchandising.windowStickerBuilt@1.

the SDK — merchandising.windowSticker
import { merchandising } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await merchandising.windowSticker({"vin":"1C4RJFBG3NC166035"})
POST /merchandisings/window-sticker
curl -X POST https://apis.vin/merchandisings/window-sticker \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4RJFBG3NC166035"}'

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:14.205Z · HTTP 200
{
  "type": "OK",
  "answers": "MerchandisingWindowSticker@1",
  "value": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "sticker": {
      "id": "WS-f53c9338",
      "listingId": "LST-a55104df",
      "priceCents": 2300000,
      "currency": "USD",
      "status": "built"
    }
  },
  "evidence": {
    "vin": "1C4RJFBG3NC166035",
    "noun": "merchandising",
    "asOf": "2026-08-10",
    "sticker": {
      "id": "WS-f53c9338",
      "listingId": "LST-a55104df",
      "priceCents": 2300000,
      "currency": "USD",
      "status": "built"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "curb-appeal-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


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