docs.vin

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

Nounmatch
PillarServices (facets: 4 data · 6 services · 2 commerce)
Capabilities12 — 0 live · 12 sandbox · 0 declared
EntitiesOffer
Doorsaggregator.vin
SDKVin.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:

Discover & read

read

match.read · GET /matches/read · gate none · sandbox · answers MatchRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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

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

EmitsMatch.computed@1.

the SDK — match.compute
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"})
POST /matches/compute
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.

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

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

EmitsMatch.failed@1 · Match.successFeeAssessed@1.

the SDK — match.successFee
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"})
POST /matches/success-fee
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.

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

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

EmitsMatch.requested@1.

the SDK — match.request
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"})
POST /matches/request
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.

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

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

EmitsMatch.failed@1 · Match.paid@1.

the SDK — match.pay
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"})
POST /matches/pay
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.

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

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

EmitsMatch.accepted@1.

the SDK — match.accept
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"})
POST /matches/accept
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.

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

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

EmitsMatch.expired@1.

the SDK — match.expire
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"})
POST /matches/expire
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — match.candidates
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"})
GET /matches/candidates
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — match.compatibility
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"})
GET /matches/compatibility
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.

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

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

EmitsMatch.proposed@1.

the SDK — match.propose
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"})
POST /matches/propose
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.

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

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

EmitsMatch.rejected@1.

the SDK — match.reject
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"})
POST /matches/reject
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — match.score
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"})
GET /matches/score
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.

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