incentive
The incentive noun — identity, lifecycle, events, and every capability as an anchored section: 16 capabilities, 5 live, 11 sandbox, 0 declared.
incentive is one of the estate's 317 automotive nouns — a job a car needs done. It carries 16 capabilities: 5 live, 11 sandbox, 0 declared · doors aggregator.vin · fi.vin.
Identity
| Noun | incentive |
| Pillar | Data (facets: 7 data · 6 services · 3 commerce) |
| Capabilities | 16 — 5 live · 11 sandbox · 0 declared |
| Entities | Deal |
| Doors | aggregator.vin · fi.vin |
| SDK | Vin.incentive.* from apis.vin |
| Address | /catalog/incentive#{action} — the anchor IS the wire name minus incentive. |
Events
The vocabulary this noun can append to the record — 10 past-tense, versioned event types, each linked to the capability that emits it:
Incentive.applied@1— emitted byapplyIncentive.chargedBack@1— emitted bychargebackIncentive.claimFiled@1— emitted byclaimIncentive.claimPaid@1— emitted byclaimPayIncentive.disputed@1— emitted bydisputeIncentive.failed@1— emitted bychargeback·claimPay·quoteIncentive.published@1— emitted bypublishIncentive.quoted@1— emitted byquoteIncentive.reconciled@1— emitted byreconcileIncentive.validated@1— emitted byvalidate
Discover & read
lookup
incentive.lookup · GET /incentives/lookup · gate none · live · answers IncentiveLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3C63R5FL9TG280381 (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 { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.lookup({"vin":"3C63R5FL9TG280381"})curl 'https://apis.vin/incentives/lookup?vin=3C63R5FL9TG280381'read
incentive.read · GET /incentives/read · gate none · live · answers IncentiveRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3C63R5FL9TG280381 (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 { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.read({"vin":"3C63R5FL9TG280381"})curl 'https://apis.vin/incentives/read?vin=3C63R5FL9TG280381'get
incentive.get · GET /incentives/get · gate none · live · answers IncentiveSet@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
region | string | no | — |
zip | string | no | — |
Door — fi.vin serves this noun on its two routes: / (the landing) · /3C63R5FL9TG280381 (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 { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.get({"vin":"3C63R5FL9TG280381"})curl 'https://apis.vin/incentives/get?vin=3C63R5FL9TG280381'history
incentive.history · GET /incentives/history · gate none · sandbox · answers IncentiveHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3C63R5FL9TG280381 (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 { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.history({"vin":"3C63R5FL9TG280381"})curl 'https://apis.vin/incentives/history?vin=3C63R5FL9TG280381'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": "IncentiveHistory@1",
"value": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"history": {
"entries": [
{
"event": "quoted",
"programId": "IPG-ceceedad",
"amountCents": 807400
},
{
"event": "applied",
"dealId": "DL-7b2d4447"
}
],
"count": 2
}
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"history": {
"entries": [
{
"event": "quoted",
"programId": "IPG-ceceedad",
"amountCents": 807400
},
{
"event": "applied",
"dealId": "DL-7b2d4447"
}
],
"count": 2
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-paper-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}eligibility
incentive.eligibility · GET /incentives/eligibility · gate key · live · answers IncentiveEligibility@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3C63R5FL9TG280381 (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 { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.eligibility({"vin":"3C63R5FL9TG280381"})curl 'https://apis.vin/incentives/eligibility?vin=3C63R5FL9TG280381'validate
incentive.validate · POST /incentives/validate · gate offer · sandbox · answers IncentiveValidate@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) · /3C63R5FL9TG280381 (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 — Incentive.validated@1.
import { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.validate({"vin":"3C63R5FL9TG280381"})curl -X POST https://apis.vin/incentives/validate \
-H 'content-type: application/json' \
-d '{"vin":"3C63R5FL9TG280381"}'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": "IncentiveValidate@1",
"value": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"validation": {
"status": "valid",
"programId": "IPG-ceceedad",
"dealId": "DL-7b2d4447",
"checks": [
"program-active",
"deal-on-file"
],
"itemCount": 3
}
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"validation": {
"status": "valid",
"programId": "IPG-ceceedad",
"dealId": "DL-7b2d4447",
"checks": [
"program-active",
"deal-on-file"
],
"itemCount": 3
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-paper-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
incentive.quote · POST /incentives/quote · gate offer · sandbox · answers IncentiveQuote@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) · /3C63R5FL9TG280381 (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 — Incentive.failed@1 · Incentive.quoted@1.
import { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.quote({"vin":"3C63R5FL9TG280381"})curl -X POST https://apis.vin/incentives/quote \
-H 'content-type: application/json' \
-d '{"vin":"3C63R5FL9TG280381"}'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": "IncentiveQuote@1",
"value": {
"vin": "3C63R5FL9TG280381",
"itemCount": 3,
"items": [
{
"kind": "customer-cash",
"incentiveRef": "INC-1E7JANZ",
"amount": {
"amount": "1982.00",
"currency": "USD"
},
"stackable": true
},
{
"kind": "loyalty",
"incentiveRef": "INC-1B1CYKY",
"amount": {
"amount": "2994.00",
"currency": "USD"
},
"stackable": true
},
{
"kind": "conquest",
"incentiveRef": "INC-150E3K9",
"amount": {
"amount": "3098.00",
"currency": "USD"
},
"stackable": false
}
],
"total": {
"amount": "8074.00",
"currency": "USD"
},
"asOf": "2026-08-10"
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"itemCount": 3,
"items": [
{
"kind": "customer-cash",
"incentiveRef": "INC-1E7JANZ",
"amount": {
"amount": "1982.00",
"currency": "USD"
},
"stackable": true
},
{
"kind": "loyalty",
"incentiveRef": "INC-1B1CYKY",
"amount": {
"amount": "2994.00",
"currency": "USD"
},
"stackable": true
},
{
"kind": "conquest",
"incentiveRef": "INC-150E3K9",
"amount": {
"amount": "3098.00",
"currency": "USD"
},
"stackable": false
}
],
"total": {
"amount": "8074.00",
"currency": "USD"
},
"asOf": "2026-08-10"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "market-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
apply
incentive.apply · POST /incentives/apply · gate offer · sandbox · answers IncentiveApply@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) · /3C63R5FL9TG280381 (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 — Incentive.applied@1.
import { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.apply({"vin":"3C63R5FL9TG280381"})curl -X POST https://apis.vin/incentives/apply \
-H 'content-type: application/json' \
-d '{"vin":"3C63R5FL9TG280381"}'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": "IncentiveApply@1",
"value": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"application": {
"status": "applied",
"id": "IAP-9dfb8e66",
"dealId": "DL-7b2d4447",
"programId": "IPG-ceceedad",
"amountCents": 807400,
"currency": "USD"
}
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"application": {
"status": "applied",
"id": "IAP-9dfb8e66",
"dealId": "DL-7b2d4447",
"programId": "IPG-ceceedad",
"amountCents": 807400,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-paper-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
reconcile
incentive.reconcile · POST /incentives/reconcile · gate offer · sandbox · answers IncentiveReconcile@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) · /3C63R5FL9TG280381 (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 — Incentive.reconciled@1.
import { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.reconcile({"vin":"3C63R5FL9TG280381"})curl -X POST https://apis.vin/incentives/reconcile \
-H 'content-type: application/json' \
-d '{"vin":"3C63R5FL9TG280381"}'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": "IncentiveReconcile@1",
"value": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"reconciliation": {
"claimStanding": "no-claim",
"rdrStanding": "not-delivered",
"position": "QUOTED",
"claimedCents": 0,
"paidCents": 0,
"chargebackCents": 0,
"netCents": 0,
"currency": "USD",
"basis": "one-total-law"
}
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"reconciliation": {
"claimStanding": "no-claim",
"rdrStanding": "not-delivered",
"position": "QUOTED",
"claimedCents": 0,
"paidCents": 0,
"chargebackCents": 0,
"netCents": 0,
"currency": "USD",
"basis": "one-total-law"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-paper-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}chargeback
incentive.chargeback · POST /incentives/chargeback · gate offer · sandbox · answers IncentiveChargeback@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) · /3C63R5FL9TG280381 (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 — Incentive.chargedBack@1 · Incentive.failed@1.
import { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.chargeback({"vin":"3C63R5FL9TG280381"})curl -X POST https://apis.vin/incentives/chargeback \
-H 'content-type: application/json' \
-d '{"vin":"3C63R5FL9TG280381"}'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": "IncentiveChargeback@1",
"value": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"chargeback": {
"status": "no-claim-on-file"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"chargeback": {
"status": "no-claim-on-file"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-paper-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}claimPay
incentive.claimPay · POST /incentives/claim-pay · gate offer · sandbox · answers IncentiveClaimPay@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) · /3C63R5FL9TG280381 (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 — Incentive.claimPaid@1 · Incentive.failed@1.
import { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.claimPay({"vin":"3C63R5FL9TG280381"})curl -X POST https://apis.vin/incentives/claim-pay \
-H 'content-type: application/json' \
-d '{"vin":"3C63R5FL9TG280381"}'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": "IncentiveClaimPay@1",
"value": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"payment": {
"status": "nothing-to-pay",
"amountCents": 0,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"payment": {
"status": "nothing-to-pay",
"amountCents": 0,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-paper-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
publish
incentive.publish · POST /incentives/publish · gate offer · sandbox · answers IncentivePublish@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) · /3C63R5FL9TG280381 (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 — Incentive.published@1.
import { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.publish({"vin":"3C63R5FL9TG280381"})curl -X POST https://apis.vin/incentives/publish \
-H 'content-type: application/json' \
-d '{"vin":"3C63R5FL9TG280381"}'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": "IncentivePublish@1",
"value": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"program": {
"id": "IPG-ceceedad",
"kinds": [
{
"kind": "customer-cash",
"stackable": true
},
{
"kind": "loyalty",
"stackable": true
},
{
"kind": "conquest",
"stackable": false
}
],
"publishedOn": "2026-07-11",
"expiresOn": "2026-09-09",
"status": "published"
}
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"program": {
"id": "IPG-ceceedad",
"kinds": [
{
"kind": "customer-cash",
"stackable": true
},
{
"kind": "loyalty",
"stackable": true
},
{
"kind": "conquest",
"stackable": false
}
],
"publishedOn": "2026-07-11",
"expiresOn": "2026-09-09",
"status": "published"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-paper-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Authorize & resolve
claim
incentive.claim · POST /incentives/claim · gate offer · sandbox · answers IncentiveClaim@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) · /3C63R5FL9TG280381 (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 — Incentive.claimFiled@1.
import { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.claim({"vin":"3C63R5FL9TG280381"})curl -X POST https://apis.vin/incentives/claim \
-H 'content-type: application/json' \
-d '{"vin":"3C63R5FL9TG280381"}'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": "IncentiveClaim@1",
"value": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"claim": {
"status": "no-retail-delivery-reported",
"rdrStanding": "not-delivered",
"position": "QUOTED"
}
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"claim": {
"status": "no-retail-delivery-reported",
"rdrStanding": "not-delivered",
"position": "QUOTED"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-paper-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}dispute
incentive.dispute · POST /incentives/dispute · gate offer · sandbox · answers IncentiveDispute@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) · /3C63R5FL9TG280381 (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 — Incentive.disputed@1.
import { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.dispute({"vin":"3C63R5FL9TG280381"})curl -X POST https://apis.vin/incentives/dispute \
-H 'content-type: application/json' \
-d '{"vin":"3C63R5FL9TG280381"}'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": "IncentiveDispute@1",
"value": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"dispute": {
"status": "nothing-to-dispute",
"claimStanding": "no-claim"
}
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"dispute": {
"status": "nothing-to-dispute",
"claimStanding": "no-claim"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-paper-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
expiry
incentive.expiry · GET /incentives/expiry · gate none · live · answers IncentiveExpiry@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3C63R5FL9TG280381 (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 { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.expiry({"vin":"3C63R5FL9TG280381"})curl 'https://apis.vin/incentives/expiry?vin=3C63R5FL9TG280381'stackability
incentive.stackability · GET /incentives/stackability · gate key · sandbox · answers IncentiveStackability@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3C63R5FL9TG280381 (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 { incentive } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await incentive.stackability({"vin":"3C63R5FL9TG280381"})curl 'https://apis.vin/incentives/stackability?vin=3C63R5FL9TG280381'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": "IncentiveStackability@1",
"value": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"stackability": {
"stackable": [
"customer-cash",
"loyalty"
],
"excluded": [
"conquest"
],
"stackableTotalCents": 497600,
"currency": "USD",
"basis": "posted-program-sheet"
}
},
"evidence": {
"vin": "3C63R5FL9TG280381",
"noun": "incentive",
"asOf": "2026-08-10",
"stackability": {
"stackable": [
"customer-cash",
"loyalty"
],
"excluded": [
"conquest"
],
"stackableTotalCents": 497600,
"currency": "USD",
"basis": "posted-program-sheet"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "deal-paper-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.
Deal
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 6 diagrams, rendered from the estate model.
Incentive · Class model
Incentive · State machine
Incentive · Class model
Incentive · State machine
Incentive · State machine
Incentive · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
holdback
The holdback noun — identity, lifecycle, events, and every capability as an anchored section: 7 capabilities, 0 live, 7 sandbox, 0 declared.
inspection
The inspection noun — identity, lifecycle, events, and every capability as an anchored section: 32 capabilities, 0 live, 32 sandbox, 0 declared.