match
The match noun — identity, lifecycle, events, and every capability as an anchored section: 12 capabilities, 0 live, 12 sandbox, 0 declared.
match is one of the estate's 317 automotive nouns — a job a car needs done. It carries 12 capabilities: 0 live, 12 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | match |
| Pillar | Services (facets: 4 data · 6 services · 2 commerce) |
| Capabilities | 12 — 0 live · 12 sandbox · 0 declared |
| Entities | Offer |
| Doors | aggregator.vin |
| SDK | Vin.match.* from apis.vin |
| Address | /catalog/match#{action} — the anchor IS the wire name minus match. |
Events
The vocabulary this noun can append to the record — 9 past-tense, versioned event types, each linked to the capability that emits it:
Match.accepted@1— emitted byacceptMatch.computed@1— emitted bycomputeMatch.expired@1— emitted byexpireMatch.failed@1— emitted bypay·successFeeMatch.paid@1— emitted bypayMatch.proposed@1— emitted byproposeMatch.rejected@1— emitted byrejectMatch.requested@1— emitted byrequestMatch.successFeeAssessed@1— emitted bysuccessFee
Discover & read
read
match.read · GET /matches/read · gate none · sandbox · answers MatchRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /KM8JF3AE1PU192686 (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 { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.read({"vin":"KM8JF3AE1PU192686"})curl 'https://apis.vin/matches/read?vin=KM8JF3AE1PU192686'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": "MatchRead@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"match": {
"id": "MTC-d20f5f27",
"offerId": "OFR-2a47d766",
"position": "Extended",
"score": 82,
"amountCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"match": {
"id": "MTC-d20f5f27",
"offerId": "OFR-2a47d766",
"position": "Extended",
"score": 82,
"amountCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
compute
match.compute · POST /matches/compute · gate offer · sandbox · answers MatchCompute@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) · /KM8JF3AE1PU192686 (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 — Match.computed@1.
import { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.compute({"vin":"KM8JF3AE1PU192686"})curl -X POST https://apis.vin/matches/compute \
-H 'content-type: application/json' \
-d '{"vin":"KM8JF3AE1PU192686"}'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": "MatchCompute@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"computation": {
"id": "MTC-d20f5f27",
"score": 82,
"basis": "market-percentile"
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"computation": {
"id": "MTC-d20f5f27",
"score": 82,
"basis": "market-percentile"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}successFee
match.successFee · POST /matches/success-fee · gate offer · sandbox · answers MatchSuccessFee@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) · /KM8JF3AE1PU192686 (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 — Match.failed@1 · Match.successFeeAssessed@1.
import { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.successFee({"vin":"KM8JF3AE1PU192686"})curl -X POST https://apis.vin/matches/success-fee \
-H 'content-type: application/json' \
-d '{"vin":"KM8JF3AE1PU192686"}'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": "MatchSuccessFee@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"fee": {
"status": "no-accepted-match",
"id": "MTC-d20f5f27",
"position": "Extended"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"fee": {
"status": "no-accepted-match",
"id": "MTC-d20f5f27",
"position": "Extended"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
request
match.request · POST /matches/request · gate offer · sandbox · answers MatchRequest@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) · /KM8JF3AE1PU192686 (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 — Match.requested@1.
import { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.request({"vin":"KM8JF3AE1PU192686"})curl -X POST https://apis.vin/matches/request \
-H 'content-type: application/json' \
-d '{"vin":"KM8JF3AE1PU192686"}'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": "MatchRequest@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"request": {
"status": "requested",
"id": "MTC-d20f5f27",
"requestedBy": "Ava Good"
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"request": {
"status": "requested",
"id": "MTC-d20f5f27",
"requestedBy": "Ava Good"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
match.pay · POST /matches/pay · gate offer · sandbox · answers MatchPay@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) · /KM8JF3AE1PU192686 (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 — Match.failed@1 · Match.paid@1.
import { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.pay({"vin":"KM8JF3AE1PU192686"})curl -X POST https://apis.vin/matches/pay \
-H 'content-type: application/json' \
-d '{"vin":"KM8JF3AE1PU192686"}'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": "MatchPay@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"payment": {
"status": "no-accepted-match",
"id": "MTC-d20f5f27",
"position": "Extended"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"payment": {
"status": "no-accepted-match",
"id": "MTC-d20f5f27",
"position": "Extended"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Authorize & resolve
accept
match.accept · POST /matches/accept · gate offer · sandbox · answers MatchAccept@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) · /KM8JF3AE1PU192686 (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 — Match.accepted@1.
import { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.accept({"vin":"KM8JF3AE1PU192686"})curl -X POST https://apis.vin/matches/accept \
-H 'content-type: application/json' \
-d '{"vin":"KM8JF3AE1PU192686"}'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": "MatchAccept@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"acceptance": {
"status": "accepted",
"id": "OFR-2a47d766",
"amountCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"acceptance": {
"status": "accepted",
"id": "OFR-2a47d766",
"amountCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Lifecycle & state
expire
match.expire · POST /matches/expire · gate offer · sandbox · answers MatchExpire@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) · /KM8JF3AE1PU192686 (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 — Match.expired@1.
import { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.expire({"vin":"KM8JF3AE1PU192686"})curl -X POST https://apis.vin/matches/expire \
-H 'content-type: application/json' \
-d '{"vin":"KM8JF3AE1PU192686"}'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": "MatchExpire@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"expiry": {
"id": "OFR-2a47d766",
"expires": true,
"expiresOn": "2026-08-17",
"position": "Extended"
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"expiry": {
"id": "OFR-2a47d766",
"expires": true,
"expiresOn": "2026-08-17",
"position": "Extended"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
candidates
match.candidates · GET /matches/candidates · gate key · sandbox · answers MatchCandidates@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /KM8JF3AE1PU192686 (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 { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.candidates({"vin":"KM8JF3AE1PU192686"})curl 'https://apis.vin/matches/candidates?vin=KM8JF3AE1PU192686'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": "MatchCandidates@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"candidates": [
{
"vin": "1HGCM82633A004352",
"listingId": "LST-e15977c4",
"priceCents": 499500
},
{
"vin": "1FL0TFL00RED00000",
"listingId": "LST-613a26f9",
"priceCents": 2375000
},
{
"vin": "1FL0TL1STED000000",
"listingId": "LST-740d986f",
"priceCents": 3120000
}
],
"count": 3,
"basis": "fleet-listed-iron"
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"candidates": [
{
"vin": "1HGCM82633A004352",
"listingId": "LST-e15977c4",
"priceCents": 499500
},
{
"vin": "1FL0TFL00RED00000",
"listingId": "LST-613a26f9",
"priceCents": 2375000
},
{
"vin": "1FL0TL1STED000000",
"listingId": "LST-740d986f",
"priceCents": 3120000
}
],
"count": 3,
"basis": "fleet-listed-iron"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}compatibility
match.compatibility · GET /matches/compatibility · gate key · sandbox · answers MatchCompatibility@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /KM8JF3AE1PU192686 (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 { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.compatibility({"vin":"KM8JF3AE1PU192686"})curl 'https://apis.vin/matches/compatibility?vin=KM8JF3AE1PU192686'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": "MatchCompatibility@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"compatibility": {
"id": "MTC-d20f5f27",
"score": 82,
"financingDecision": "approved",
"compatible": true
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"compatibility": {
"id": "MTC-d20f5f27",
"score": 82,
"financingDecision": "approved",
"compatible": true
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}propose
match.propose · POST /matches/propose · gate offer · sandbox · answers MatchPropose@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) · /KM8JF3AE1PU192686 (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 — Match.proposed@1.
import { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.propose({"vin":"KM8JF3AE1PU192686"})curl -X POST https://apis.vin/matches/propose \
-H 'content-type: application/json' \
-d '{"vin":"KM8JF3AE1PU192686"}'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": "MatchPropose@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"proposal": {
"status": "offer-already-extended",
"id": "MTC-d20f5f27",
"offerId": "OFR-2a47d766",
"position": "Extended"
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"proposal": {
"status": "offer-already-extended",
"id": "MTC-d20f5f27",
"offerId": "OFR-2a47d766",
"position": "Extended"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}reject
match.reject · POST /matches/reject · gate offer · sandbox · answers MatchReject@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) · /KM8JF3AE1PU192686 (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 — Match.rejected@1.
import { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.reject({"vin":"KM8JF3AE1PU192686"})curl -X POST https://apis.vin/matches/reject \
-H 'content-type: application/json' \
-d '{"vin":"KM8JF3AE1PU192686"}'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": "MatchReject@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"rejection": {
"status": "declined",
"id": "OFR-2a47d766"
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"rejection": {
"status": "declined",
"id": "OFR-2a47d766"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}score
match.score · GET /matches/score · gate key · sandbox · answers MatchScore@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /KM8JF3AE1PU192686 (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 { match } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await match.score({"vin":"KM8JF3AE1PU192686"})curl 'https://apis.vin/matches/score?vin=KM8JF3AE1PU192686'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": "MatchScore@1",
"value": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"score": {
"id": "MTC-d20f5f27",
"score": 82,
"basis": "market-percentile"
}
},
"evidence": {
"vin": "KM8JF3AE1PU192686",
"noun": "match",
"asOf": "2026-08-10",
"score": {
"id": "MTC-d20f5f27",
"score": 82,
"basis": "market-percentile"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "desk-band-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
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 3 diagrams, rendered from the estate model.
Match · Class model
Match · State machine
Match · 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.