docs.vin

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

Nounpricing
PillarData (facets: 8 data · 6 services · 1 commerce)
Capabilities15 — 1 live · 14 sandbox · 0 declared
EntitiesListing
Doorsaggregator.vin
SDKVin.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:

Discover & read

read

pricing.read · GET /pricings/read · gate none · sandbox · answers PricingRead@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

the SDK — pricing.read
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"})
GET /pricings/read
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.

receipt · executed 2026-08-17T12:42:15.780Z · HTTP 200
{
  "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.

Dooraggregator.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.

the SDK — pricing.priceHistory
import { pricing } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.priceHistory()
GET /pricings/price-history
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.

receipt · executed 2026-08-16T14:50:09.978Z · HTTP 200
{
  "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

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) · /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.

EmitsPricing.autoPriced@1.

the SDK — pricing.autoPrice
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"})
POST /pricings/auto-price
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.

receipt · executed 2026-08-17T12:42:15.772Z · HTTP 200
{
  "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

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) · /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.

EmitsPricing.failed@1 · Pricing.priceHeld@1.

the SDK — pricing.holdPrice
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"})
POST /pricings/hold-price
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.

receipt · executed 2026-08-17T12:42:15.772Z · HTTP 200
{
  "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

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) · /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.

EmitsPricing.repriced@1.

the SDK — pricing.reprice
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"})
POST /pricings/reprice
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.

receipt · executed 2026-08-17T12:42:15.796Z · HTTP 200
{
  "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.

Dooraggregator.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.

EmitsPricing.subscribed@1.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await pricing.subscribe()
POST /pricings/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.

receipt · executed 2026-08-16T14:50:09.978Z · HTTP 200
{
  "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

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) · /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.

EmitsPricing.markdownScheduled@1.

the SDK — pricing.markdownSchedule
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"})
POST /pricings/markdown-schedule
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.

receipt · executed 2026-08-17T12:42:15.772Z · HTTP 200
{
  "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

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) · /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.

EmitsPricing.published@1.

the SDK — pricing.publish
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"})
POST /pricings/publish
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.

receipt · executed 2026-08-17T12:42:15.780Z · HTTP 200
{
  "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

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) · /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.

EmitsPricing.approved@1.

the SDK — pricing.approve
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"})
POST /pricings/approve
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.

receipt · executed 2026-08-17T12:42:15.767Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

the SDK — pricing.elasticity
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"})
GET /pricings/elasticity
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.

receipt · executed 2026-08-17T12:42:15.772Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

the SDK — pricing.marketComps
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"})
GET /pricings/market-comps
curl 'https://apis.vin/pricings/market-comps?vin=1C4RJKER8T8582037'

priceToMarket

pricing.priceToMarket · GET /pricings/price-to-market · gate key · sandbox · answers PricingPriceToMarket@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

the SDK — pricing.priceToMarket
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"})
GET /pricings/price-to-market
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.

receipt · executed 2026-08-17T12:42:15.776Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

the SDK — pricing.recommendation
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"})
GET /pricings/recommendation
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.

receipt · executed 2026-08-17T12:42:15.785Z · HTTP 200
{
  "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

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) · /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.

EmitsPricing.set@1.

the SDK — pricing.set
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"})
POST /pricings/set
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.

receipt · executed 2026-08-17T12:42:15.812Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

Dooraggregator.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.

the SDK — pricing.velocity
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"})
GET /pricings/velocity
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.

receipt · executed 2026-08-17T12:42:15.812Z · HTTP 200
{
  "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.