pricing
The pricing noun — identity, lifecycle, events, and every capability as an anchored section: 15 capabilities, 1 live, 14 sandbox, 0 declared.
pricing is one of the estate's 317 automotive nouns — a job a car needs done. It carries 15 capabilities: 1 live, 14 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | pricing |
| Pillar | Data (facets: 8 data · 6 services · 1 commerce) |
| Capabilities | 15 — 1 live · 14 sandbox · 0 declared |
| Entities | Listing |
| Doors | aggregator.vin |
| SDK | Vin.pricing.* from apis.vin |
| Address | /catalog/pricing#{action} — the anchor IS the wire name minus pricing. |
Events
The vocabulary this noun can append to the record — 9 past-tense, versioned event types, each linked to the capability that emits it:
Pricing.approved@1— emitted byapprovePricing.autoPriced@1— emitted byautoPricePricing.failed@1— emitted byholdPricePricing.markdownScheduled@1— emitted bymarkdownSchedulePricing.priceHeld@1— emitted byholdPricePricing.published@1— emitted bypublishPricing.repriced@1— emitted byrepricePricing.set@1— emitted bysetPricing.subscribed@1— emitted bysubscribe
Discover & read
read
pricing.read · GET /pricings/read · gate none · sandbox · answers PricingRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.read({"vin":"1C4RJKER8T8582037"})curl 'https://apis.vin/pricings/read?vin=1C4RJKER8T8582037'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": "PricingRead@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"pricing": {
"listingId": "LST-311b690e",
"priceCents": 2300000,
"msrpCents": 6260300,
"currency": "USD",
"position": "Draft"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"pricing": {
"listingId": "LST-311b690e",
"priceCents": 2300000,
"msrpCents": 6260300,
"currency": "USD",
"position": "Draft"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}priceHistory
pricing.priceHistory · GET /pricings/price-history · gate none · sandbox · answers PricingPriceHistory@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.priceHistory()curl 'https://apis.vin/pricings/price-history'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": "PricingPriceHistory@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "pricing",
"asOf": "2026-08-10",
"events": [
{
"date": "2026-08-10",
"kind": "listed",
"priceCents": 499500,
"currency": "USD"
}
]
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "pricing",
"asOf": "2026-08-10",
"events": [
{
"date": "2026-08-10",
"kind": "listed",
"priceCents": 499500,
"currency": "USD"
}
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
autoPrice
pricing.autoPrice · POST /pricings/auto-price · gate offer · sandbox · answers PricingAutoPrice@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 — Pricing.autoPriced@1.
import { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.autoPrice({"vin":"1C4RJKER8T8582037"})curl -X POST https://apis.vin/pricings/auto-price \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKER8T8582037"}'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": "PricingAutoPrice@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"autoPrice": {
"listingId": "LST-311b690e",
"priceCents": 2300000,
"action": "hold",
"currency": "USD",
"status": "priced"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"autoPrice": {
"listingId": "LST-311b690e",
"priceCents": 2300000,
"action": "hold",
"currency": "USD",
"status": "priced"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}holdPrice
pricing.holdPrice · POST /pricings/hold-price · gate offer · sandbox · answers PricingHoldPrice@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 — Pricing.failed@1 · Pricing.priceHeld@1.
import { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.holdPrice({"vin":"1C4RJKER8T8582037"})curl -X POST https://apis.vin/pricings/hold-price \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKER8T8582037"}'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": "PricingHoldPrice@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"hold": {
"status": "held",
"listingId": "LST-311b690e",
"priceCents": 2300000,
"currency": "USD",
"holdUntil": "2026-08-24"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"hold": {
"status": "held",
"listingId": "LST-311b690e",
"priceCents": 2300000,
"currency": "USD",
"holdUntil": "2026-08-24"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}reprice
pricing.reprice · POST /pricings/reprice · gate offer · sandbox · answers PricingReprice@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 — Pricing.repriced@1.
import { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.reprice({"vin":"1C4RJKER8T8582037"})curl -X POST https://apis.vin/pricings/reprice \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKER8T8582037"}'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": "PricingReprice@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"reprice": {
"status": "refused",
"reason": "not-listed"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"reprice": {
"status": "refused",
"reason": "not-listed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
subscribe
pricing.subscribe · POST /pricings/subscribe · gate key · sandbox · answers PricingSubscribe@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 — Pricing.subscribed@1.
import { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.subscribe()curl -X POST https://apis.vin/pricings/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": "PricingSubscribe@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "pricing",
"asOf": "2026-08-10",
"subscription": {
"id": "PS-6b8445e9",
"plan": "pricing-desk",
"amountCents": 19900,
"currency": "USD",
"status": "active"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "pricing",
"asOf": "2026-08-10",
"subscription": {
"id": "PS-6b8445e9",
"plan": "pricing-desk",
"amountCents": 19900,
"currency": "USD",
"status": "active"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}markdownSchedule
pricing.markdownSchedule · POST /pricings/markdown-schedule · gate offer · sandbox · answers PricingMarkdownSchedule@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 — Pricing.markdownScheduled@1.
import { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.markdownSchedule({"vin":"1C4RJKER8T8582037"})curl -X POST https://apis.vin/pricings/markdown-schedule \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKER8T8582037"}'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": "PricingMarkdownSchedule@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"schedule": {
"listingId": "LST-311b690e",
"ageDays": 0,
"steps": [
{
"atAgeDays": 15,
"action": "review",
"priceCents": 2300000
},
{
"atAgeDays": 30,
"action": "markdown",
"priceCents": 2185000
}
],
"currency": "USD"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"schedule": {
"listingId": "LST-311b690e",
"ageDays": 0,
"steps": [
{
"atAgeDays": 15,
"action": "review",
"priceCents": 2300000
},
{
"atAgeDays": 30,
"action": "markdown",
"priceCents": 2185000
}
],
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
publish
pricing.publish · POST /pricings/publish · gate offer · sandbox · answers PricingPublish@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 — Pricing.published@1.
import { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.publish({"vin":"1C4RJKER8T8582037"})curl -X POST https://apis.vin/pricings/publish \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKER8T8582037"}'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": "PricingPublish@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"publication": {
"status": "published",
"id": "LST-311b690e",
"position": "Active"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"publication": {
"status": "published",
"id": "LST-311b690e",
"position": "Active"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Authorize & resolve
approve
pricing.approve · POST /pricings/approve · gate offer · sandbox · answers PricingApprove@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 — Pricing.approved@1.
import { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.approve({"vin":"1C4RJKER8T8582037"})curl -X POST https://apis.vin/pricings/approve \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKER8T8582037"}'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": "PricingApprove@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"approval": {
"status": "approved",
"listingId": "LST-311b690e",
"approvedCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"approval": {
"status": "approved",
"listingId": "LST-311b690e",
"approvedCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
elasticity
pricing.elasticity · GET /pricings/elasticity · gate key · sandbox · answers PricingElasticity@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.elasticity({"vin":"1C4RJKER8T8582037"})curl 'https://apis.vin/pricings/elasticity?vin=1C4RJKER8T8582037'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": "PricingElasticity@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"elasticity": {
"listingId": "LST-311b690e",
"coefficient": -2.37,
"basis": "seeded"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"elasticity": {
"listingId": "LST-311b690e",
"coefficient": -2.37,
"basis": "seeded"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}marketComps
pricing.marketComps · GET /pricings/market-comps · gate key · live · answers PricingMarketComps@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.marketComps({"vin":"1C4RJKER8T8582037"})curl 'https://apis.vin/pricings/market-comps?vin=1C4RJKER8T8582037'priceToMarket
pricing.priceToMarket · GET /pricings/price-to-market · gate key · sandbox · answers PricingPriceToMarket@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.priceToMarket({"vin":"1C4RJKER8T8582037"})curl 'https://apis.vin/pricings/price-to-market?vin=1C4RJKER8T8582037'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": "PricingPriceToMarket@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"market": {
"listingId": "LST-311b690e",
"priceCents": 2300000,
"currency": "USD",
"compSetSize": 3,
"percentile": 33,
"basis": "fleet-listed-iron"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"market": {
"listingId": "LST-311b690e",
"priceCents": 2300000,
"currency": "USD",
"compSetSize": 3,
"percentile": 33,
"basis": "fleet-listed-iron"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}recommendation
pricing.recommendation · GET /pricings/recommendation · gate key · sandbox · answers PricingRecommendation@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.recommendation({"vin":"1C4RJKER8T8582037"})curl 'https://apis.vin/pricings/recommendation?vin=1C4RJKER8T8582037'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": "PricingRecommendation@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"recommendation": {
"listingId": "LST-311b690e",
"action": "hold",
"recommendedCents": 2300000,
"currency": "USD",
"basis": "aging-marks"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"recommendation": {
"listingId": "LST-311b690e",
"action": "hold",
"recommendedCents": 2300000,
"currency": "USD",
"basis": "aging-marks"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}set
pricing.set · POST /pricings/set · gate offer · sandbox · answers PricingSet@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 — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 — Pricing.set@1.
import { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.set({"vin":"1C4RJKER8T8582037"})curl -X POST https://apis.vin/pricings/set \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKER8T8582037"}'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": "PricingSet@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"setting": {
"status": "set",
"listingId": "LST-311b690e",
"priceCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"setting": {
"status": "set",
"listingId": "LST-311b690e",
"priceCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}velocity
pricing.velocity · GET /pricings/velocity · gate key · sandbox · answers PricingVelocity@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKER8T8582037 (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 { pricing } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.velocity({"vin":"1C4RJKER8T8582037"})curl 'https://apis.vin/pricings/velocity?vin=1C4RJKER8T8582037'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": "PricingVelocity@1",
"value": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"velocity": {
"listingId": "LST-311b690e",
"turnDays": 56,
"targetDays": 45,
"pace": "slow",
"stockNumber": "STK-d09076de"
}
},
"evidence": {
"vin": "1C4RJKER8T8582037",
"noun": "pricing",
"asOf": "2026-08-10",
"velocity": {
"listingId": "LST-311b690e",
"turnDays": 56,
"targetDays": 45,
"pace": "slow",
"stockNumber": "STK-d09076de"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-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
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 2 diagrams, rendered from the estate model.
Pricing · Class model
Pricing · State machine
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
ppi
The ppi noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 0 live, 14 sandbox, 0 declared.
protectionProduct
The protectionProduct noun — identity, lifecycle, events, and every capability as an anchored section: 15 capabilities, 0 live, 15 sandbox, 0 declared.