offer
The offer noun — identity, lifecycle, events, and every capability as an anchored section: 15 capabilities, 1 live, 14 sandbox, 0 declared.
offer 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 | offer |
| Pillar | Services (facets: 3 data · 6 services · 6 commerce) |
| Capabilities | 15 — 1 live · 14 sandbox · 0 declared |
| Entities | Offer |
| Doors | aggregator.vin |
| SDK | Vin.offer.* from apis.vin |
| Address | /catalog/offer#{action} — the anchor IS the wire name minus offer. |
Lifecycle
Offer — OfferFSM: 6 states, 7 transitions — Extended · Countered · Accepted · Declined · Expired · Withdrawn. Each transition is a past-tense event on the record.
Events
The vocabulary this noun can append to the record — 13 past-tense, versioned event types, each linked to the capability that emits it:
Offer.accepted@1— emitted byacceptOffer.bound@1— emitted bybindOffer.countered@1— emitted bycounterOffer.declined@1— emitted bydeclineOffer.deposited@1— emitted bydepositOffer.expired@1— emitted byexpireOffer.failed@1— emitted bybind·deposit·refundOffer.guaranteeIssued@1— emitted byguaranteeIssueOffer.instantCashOffered@1— emitted byinstantCashOfferOffer.made@1— emitted bymakeOffer.redeemed@1— emitted byredeemOffer.refunded@1— emitted byrefundOffer.withdrawn@1— emitted bywithdraw
Discover & read
read
offer.read · GET /offers/read · gate none · sandbox · answers OfferRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1GTZ7HFP3P1229718 (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 { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.read({"vin":"1GTZ7HFP3P1229718"})curl 'https://apis.vin/offers/read?vin=1GTZ7HFP3P1229718'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": "OfferRead@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"offer": {
"id": "OFR-75e5c373",
"position": "Extended",
"amountCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"offer": {
"id": "OFR-75e5c373",
"position": "Extended",
"amountCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}status
offer.status · GET /offers/status · gate none · sandbox · answers OfferStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1GTZ7HFP3P1229718 (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 { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.status({"vin":"1GTZ7HFP3P1229718"})curl 'https://apis.vin/offers/status?vin=1GTZ7HFP3P1229718'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": "OfferStatus@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"offer": {
"id": "OFR-75e5c373",
"position": "Extended",
"amountCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"offer": {
"id": "OFR-75e5c373",
"position": "Extended",
"amountCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
terms
offer.terms · GET /offers/terms · gate none · sandbox · answers OfferTerms@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1GTZ7HFP3P1229718 (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 { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.terms({"vin":"1GTZ7HFP3P1229718"})curl 'https://apis.vin/offers/terms?vin=1GTZ7HFP3P1229718'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": "OfferTerms@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"terms": {
"id": "OFR-75e5c373",
"decision": "approved",
"rateBand": "best",
"termMonths": 60,
"currency": "USD"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"terms": {
"id": "OFR-75e5c373",
"decision": "approved",
"rateBand": "best",
"termMonths": 60,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}instantCashOffer
offer.instantCashOffer · POST /offers/instant-cash-offer · gate key · live · answers OfferInstantCashOffer@1
Promoted — earned its own page: /catalog/offer.instantCashOffer (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) · /1GTZ7HFP3P1229718 (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.
Emits — Offer.instantCashOffered@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.instantCashOffer()curl -X POST https://apis.vin/offers/instant-cash-offer \
-H 'content-type: application/json' \
-d '{}'Pay & settle
deposit
offer.deposit · POST /offers/deposit · gate offer · sandbox · answers OfferDeposit@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) · /1GTZ7HFP3P1229718 (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 — Offer.deposited@1 · Offer.failed@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.deposit({"vin":"1GTZ7HFP3P1229718"})curl -X POST https://apis.vin/offers/deposit \
-H 'content-type: application/json' \
-d '{"vin":"1GTZ7HFP3P1229718"}'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": "OfferDeposit@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"deposit": {
"id": "OFD-dabf935d",
"amountCents": 50000,
"currency": "USD",
"status": "held",
"refundable": true
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"deposit": {
"id": "OFD-dabf935d",
"amountCents": 50000,
"currency": "USD",
"status": "held",
"refundable": true
},
"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
}
}refund
offer.refund · POST /offers/refund · gate offer · sandbox · answers OfferRefund@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) · /1GTZ7HFP3P1229718 (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 — Offer.failed@1 · Offer.refunded@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.refund({"vin":"1GTZ7HFP3P1229718"})curl -X POST https://apis.vin/offers/refund \
-H 'content-type: application/json' \
-d '{"vin":"1GTZ7HFP3P1229718"}'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": "OfferRefund@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"refund": {
"status": "deposit-still-held",
"id": "OFR-75e5c373",
"position": "Extended"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"refund": {
"status": "deposit-still-held",
"id": "OFR-75e5c373",
"position": "Extended"
},
"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
}
}Fulfill & operate
guaranteeIssue
offer.guaranteeIssue · POST /offers/guarantee-issue · gate key · sandbox · answers OfferGuaranteeIssue@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1GTZ7HFP3P1229718 (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 — Offer.guaranteeIssued@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.guaranteeIssue()curl -X POST https://apis.vin/offers/guarantee-issue \
-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": "OfferGuaranteeIssue@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "offer",
"asOf": "2026-08-10",
"guarantee": {
"id": "OG-d491a166",
"offerId": "OFR-056ae566",
"guaranteedCents": 399600,
"currency": "USD",
"expiresOn": "2026-08-17",
"status": "issued"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "offer",
"asOf": "2026-08-10",
"guarantee": {
"id": "OG-d491a166",
"offerId": "OFR-056ae566",
"guaranteedCents": 399600,
"currency": "USD",
"expiresOn": "2026-08-17",
"status": "issued"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Authorize & resolve
accept
offer.accept · POST /offers/accept · gate offer · sandbox · answers OfferAccept@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) · /1GTZ7HFP3P1229718 (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 — Offer.accepted@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.accept({"vin":"1GTZ7HFP3P1229718"})curl -X POST https://apis.vin/offers/accept \
-H 'content-type: application/json' \
-d '{"vin":"1GTZ7HFP3P1229718"}'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": "OfferAccept@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"acceptance": {
"status": "accepted",
"id": "OFR-75e5c373",
"amountCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"acceptance": {
"status": "accepted",
"id": "OFR-75e5c373",
"amountCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}decline
offer.decline · POST /offers/decline · gate offer · sandbox · answers OfferDecline@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) · /1GTZ7HFP3P1229718 (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 — Offer.declined@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.decline({"vin":"1GTZ7HFP3P1229718"})curl -X POST https://apis.vin/offers/decline \
-H 'content-type: application/json' \
-d '{"vin":"1GTZ7HFP3P1229718"}'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": "OfferDecline@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"decline": {
"status": "declined",
"id": "OFR-75e5c373"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"decline": {
"status": "declined",
"id": "OFR-75e5c373"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Lifecycle & state
expire
offer.expire · POST /offers/expire · gate offer · sandbox · answers OfferExpire@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) · /1GTZ7HFP3P1229718 (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 — Offer.expired@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.expire({"vin":"1GTZ7HFP3P1229718"})curl -X POST https://apis.vin/offers/expire \
-H 'content-type: application/json' \
-d '{"vin":"1GTZ7HFP3P1229718"}'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": "OfferExpire@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"expiry": {
"id": "OFR-75e5c373",
"expires": true,
"expiresOn": "2026-08-17",
"position": "Extended"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"expiry": {
"id": "OFR-75e5c373",
"expires": true,
"expiresOn": "2026-08-17",
"position": "Extended"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
bind
offer.bind · POST /offers/bind · gate offer · sandbox · answers OfferBind@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) · /1GTZ7HFP3P1229718 (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 — Offer.bound@1 · Offer.failed@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.bind({"vin":"1GTZ7HFP3P1229718"})curl -X POST https://apis.vin/offers/bind \
-H 'content-type: application/json' \
-d '{"vin":"1GTZ7HFP3P1229718"}'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": "OfferBind@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"binding": {
"status": "not-accepted",
"id": "OFR-75e5c373",
"position": "Extended"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"binding": {
"status": "not-accepted",
"id": "OFR-75e5c373",
"position": "Extended"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}counter
offer.counter · POST /offers/counter · gate offer · sandbox · answers OfferCounter@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) · /1GTZ7HFP3P1229718 (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 — Offer.countered@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.counter({"vin":"1GTZ7HFP3P1229718"})curl -X POST https://apis.vin/offers/counter \
-H 'content-type: application/json' \
-d '{"vin":"1GTZ7HFP3P1229718"}'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": "OfferCounter@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"counter": {
"status": "countered",
"id": "OFR-75e5c373",
"amountCents": 2185000,
"currency": "USD"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"counter": {
"status": "countered",
"id": "OFR-75e5c373",
"amountCents": 2185000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}make
offer.make · POST /offers/make · gate offer · sandbox · answers OfferMake@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) · /1GTZ7HFP3P1229718 (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 — Offer.made@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.make({"vin":"1GTZ7HFP3P1229718"})curl -X POST https://apis.vin/offers/make \
-H 'content-type: application/json' \
-d '{"vin":"1GTZ7HFP3P1229718"}'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": "OfferMake@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"offer": {
"status": "already-extended",
"id": "OFR-75e5c373",
"position": "Extended"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"offer": {
"status": "already-extended",
"id": "OFR-75e5c373",
"position": "Extended"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}redeem
offer.redeem · POST /offers/redeem · gate key · sandbox · answers OfferRedeem@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1GTZ7HFP3P1229718 (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 — Offer.redeemed@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.redeem()curl -X POST https://apis.vin/offers/redeem \
-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": "OfferRedeem@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "offer",
"asOf": "2026-08-10",
"redemption": {
"status": "no-offer-on-file"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "offer",
"asOf": "2026-08-10",
"redemption": {
"status": "no-offer-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}withdraw
offer.withdraw · POST /offers/withdraw · gate offer · sandbox · answers OfferWithdraw@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) · /1GTZ7HFP3P1229718 (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 — Offer.withdrawn@1.
import { offer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await offer.withdraw({"vin":"1GTZ7HFP3P1229718"})curl -X POST https://apis.vin/offers/withdraw \
-H 'content-type: application/json' \
-d '{"vin":"1GTZ7HFP3P1229718"}'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": "OfferWithdraw@1",
"value": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"withdrawal": {
"status": "withdrawn",
"id": "OFR-75e5c373"
}
},
"evidence": {
"vin": "1GTZ7HFP3P1229718",
"noun": "offer",
"asOf": "2026-08-10",
"withdrawal": {
"status": "withdrawn",
"id": "OFR-75e5c373"
}
},
"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.
Offer
Schema
| Property | Type | Notes |
|---|---|---|
offerId | id | off_ |
vin | string | — |
amount | money | — |
payoffId | ref→Payoff | — |
netToSeller | money | — |
provider | string | abstract |
status | OfferFSM | — |
expiresAt | datetime | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
deal | offer | 1:0..1 | trade |
offer | payoff | 1:0..1 | nets against |
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.
Offer · Class model
Offer · 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.