consumer
The consumer noun — identity, lifecycle, events, and every capability as an anchored section: 18 capabilities, 0 live, 18 sandbox, 0 declared.
consumer is one of the estate's 317 automotive nouns — a job a car needs done. It carries 18 capabilities: 0 live, 18 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | consumer |
| Pillar | Services (facets: 6 data · 9 services · 3 commerce) |
| Capabilities | 18 — 0 live · 18 sandbox · 0 declared |
| Entities | Customer |
| Doors | aggregator.vin |
| SDK | Vin.consumer.* from apis.vin |
| Address | /catalog/consumer#{action} — the anchor IS the wire name minus consumer. |
Events
The vocabulary this noun can append to the record — 13 past-tense, versioned event types, each linked to the capability that emits it:
Consumer.accessibleDisclosured@1— emitted byaccessibleDisclosureConsumer.accessibleTestDriven@1— emitted byaccessibleTestDriveConsumer.consentCaptured@1— emitted byconsentCaptureConsumer.coolingOffRescinded@1— emitted bycoolingOffRescindConsumer.deposited@1— emitted bydepositConsumer.failed@1— emitted bydeposit·pay·refundConsumer.identityProofed@1— emitted byidentityProofConsumer.kycRun@1— emitted bykycConsumer.optedOut@1— emitted byoptOutConsumer.paid@1— emitted bypayConsumer.prequalified@1— emitted byprequalifyConsumer.refunded@1— emitted byrefundConsumer.registered@1— emitted byregister
Discover & read
lookup
consumer.lookup · GET /consumers/lookup · gate none · sandbox · answers ConsumerLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6SRFJT3PN653372 (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 { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.lookup({"vin":"1C6SRFJT3PN653372"})curl 'https://apis.vin/consumers/lookup?vin=1C6SRFJT3PN653372'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": "ConsumerLookup@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"consumer": {
"identityId": "ID-11f17424",
"name": "Ava Good",
"castRow": "super-prime",
"tier": "super-prime",
"score": 843
},
"creditStanding": {
"tier": "super-prime",
"score": 843
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"consumer": {
"identityId": "ID-11f17424",
"name": "Ava Good",
"castRow": "super-prime",
"tier": "super-prime",
"score": 843
},
"creditStanding": {
"tier": "super-prime",
"score": 843
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}read
consumer.read · GET /consumers/read · gate none · sandbox · answers ConsumerRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6SRFJT3PN653372 (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 { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.read({"vin":"1C6SRFJT3PN653372"})curl 'https://apis.vin/consumers/read?vin=1C6SRFJT3PN653372'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": "ConsumerRead@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"consumer": {
"identityId": "ID-11f17424",
"name": "Ava Good",
"castRow": "super-prime",
"tier": "super-prime",
"score": 843
},
"creditStanding": {
"tier": "super-prime",
"score": 843
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"consumer": {
"identityId": "ID-11f17424",
"name": "Ava Good",
"castRow": "super-prime",
"tier": "super-prime",
"score": 843
},
"creditStanding": {
"tier": "super-prime",
"score": 843
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}history
consumer.history · GET /consumers/history · gate none · sandbox · answers ConsumerHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6SRFJT3PN653372 (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 { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.history({"vin":"1C6SRFJT3PN653372"})curl 'https://apis.vin/consumers/history?vin=1C6SRFJT3PN653372'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": "ConsumerHistory@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"events": [
{
"date": "2025-11-02",
"kind": "inquiry"
},
{
"date": "2026-04-12",
"kind": "consent-captured"
}
]
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"events": [
{
"date": "2025-11-02",
"kind": "inquiry"
},
{
"date": "2026-04-12",
"kind": "consent-captured"
}
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}consentStatus
consumer.consentStatus · GET /consumers/consent-status · gate none · sandbox · answers ConsumerConsentStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6SRFJT3PN653372 (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 { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.consentStatus({"vin":"1C6SRFJT3PN653372"})curl 'https://apis.vin/consumers/consent-status?vin=1C6SRFJT3PN653372'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": "ConsumerConsentStatus@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"consent": {
"identityId": "ID-11f17424",
"status": "granted",
"channels": [
"email",
"sms",
"phone"
],
"capturedAt": "2026-04-12"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"consent": {
"identityId": "ID-11f17424",
"status": "granted",
"channels": [
"email",
"sms",
"phone"
],
"capturedAt": "2026-04-12"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
register
consumer.register · POST /consumers/register · gate offer · sandbox · answers ConsumerRegister@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) · /1C6SRFJT3PN653372 (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 — Consumer.registered@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.register({"vin":"1C6SRFJT3PN653372"})curl -X POST https://apis.vin/consumers/register \
-H 'content-type: application/json' \
-d '{"vin":"1C6SRFJT3PN653372"}'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": "ConsumerRegister@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"registration": {
"status": "existing-identity",
"identityId": "ID-11f17424"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"registration": {
"status": "existing-identity",
"identityId": "ID-11f17424"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
consumer.pay · POST /consumers/pay · gate offer · sandbox · answers ConsumerPay@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) · /1C6SRFJT3PN653372 (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 — Consumer.failed@1 · Consumer.paid@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.pay({"vin":"1C6SRFJT3PN653372"})curl -X POST https://apis.vin/consumers/pay \
-H 'content-type: application/json' \
-d '{"vin":"1C6SRFJT3PN653372"}'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": "ConsumerPay@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"payment": {
"id": "PAY-0f70d476",
"amountCents": 50000,
"currency": "USD",
"status": "settled"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"payment": {
"id": "PAY-0f70d476",
"amountCents": 50000,
"currency": "USD",
"status": "settled"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}deposit
consumer.deposit · POST /consumers/deposit · gate offer · sandbox · answers ConsumerDeposit@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) · /1C6SRFJT3PN653372 (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 — Consumer.deposited@1 · Consumer.failed@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.deposit({"vin":"1C6SRFJT3PN653372"})curl -X POST https://apis.vin/consumers/deposit \
-H 'content-type: application/json' \
-d '{"vin":"1C6SRFJT3PN653372"}'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": "ConsumerDeposit@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"deposit": {
"id": "DP-bfcd21c0",
"vin": "1C6SRFJT3PN653372",
"amountCents": 50000,
"currency": "USD",
"status": "held",
"refundable": true
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"deposit": {
"id": "DP-bfcd21c0",
"vin": "1C6SRFJT3PN653372",
"amountCents": 50000,
"currency": "USD",
"status": "held",
"refundable": true
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}refund
consumer.refund · POST /consumers/refund · gate offer · sandbox · answers ConsumerRefund@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) · /1C6SRFJT3PN653372 (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 — Consumer.failed@1 · Consumer.refunded@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.refund({"vin":"1C6SRFJT3PN653372"})curl -X POST https://apis.vin/consumers/refund \
-H 'content-type: application/json' \
-d '{"vin":"1C6SRFJT3PN653372"}'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": "ConsumerRefund@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"refund": {
"id": "RF-d49a32ea",
"amountCents": 50000,
"currency": "USD",
"status": "refunded"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"refund": {
"id": "RF-d49a32ea",
"amountCents": 50000,
"currency": "USD",
"status": "refunded"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}consentCapture
consumer.consentCapture · POST /consumers/consent-capture · gate offer · sandbox · answers ConsumerConsentCapture@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) · /1C6SRFJT3PN653372 (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 — Consumer.consentCaptured@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.consentCapture({"vin":"1C6SRFJT3PN653372"})curl -X POST https://apis.vin/consumers/consent-capture \
-H 'content-type: application/json' \
-d '{"vin":"1C6SRFJT3PN653372"}'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": "ConsumerConsentCapture@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"capture": {
"status": "captured",
"consent": {
"identityId": "ID-11f17424",
"status": "granted",
"channels": [
"email",
"sms",
"phone"
],
"capturedAt": "2026-04-12"
}
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"capture": {
"status": "captured",
"consent": {
"identityId": "ID-11f17424",
"status": "granted",
"channels": [
"email",
"sms",
"phone"
],
"capturedAt": "2026-04-12"
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
accessibleDisclosure
consumer.accessibleDisclosure · POST /consumers/accessible-disclosure · gate key · sandbox · answers ConsumerAccessibleDisclosure@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6SRFJT3PN653372 (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 — Consumer.accessibleDisclosured@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.accessibleDisclosure()curl -X POST https://apis.vin/consumers/accessible-disclosure \
-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": "ConsumerAccessibleDisclosure@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"disclosure": {
"formats": [
"large-print",
"audio",
"screen-reader"
],
"status": "available"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"disclosure": {
"formats": [
"large-print",
"audio",
"screen-reader"
],
"status": "available"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}accessibleTestDrive
consumer.accessibleTestDrive · POST /consumers/accessible-test-drive · gate key · sandbox · answers ConsumerAccessibleTestDrive@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6SRFJT3PN653372 (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 — Consumer.accessibleTestDriven@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.accessibleTestDrive()curl -X POST https://apis.vin/consumers/accessible-test-drive \
-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": "ConsumerAccessibleTestDrive@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"appointment": {
"id": "TD-6eec98a9",
"vin": "1HGCM82633A004352",
"date": "2026-08-12",
"status": "scheduled",
"accommodations": [
"wheelchair-transfer",
"hand-controls"
]
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"appointment": {
"id": "TD-6eec98a9",
"vin": "1HGCM82633A004352",
"date": "2026-08-12",
"status": "scheduled",
"accommodations": [
"wheelchair-transfer",
"hand-controls"
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}consentReceipt
consumer.consentReceipt · GET /consumers/consent-receipt · gate none · sandbox · answers ConsumerConsentReceipt@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6SRFJT3PN653372 (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 { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.consentReceipt()curl 'https://apis.vin/consumers/consent-receipt'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": "ConsumerConsentReceipt@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"receipt": {
"id": "CR-c578225a",
"identityId": "ID-11f17424",
"status": "granted",
"channels": [
"email",
"sms",
"phone"
],
"capturedAt": "2026-04-12"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"receipt": {
"id": "CR-c578225a",
"identityId": "ID-11f17424",
"status": "granted",
"channels": [
"email",
"sms",
"phone"
],
"capturedAt": "2026-04-12"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}coolingOffRescind
consumer.coolingOffRescind · POST /consumers/cooling-off-rescind · gate key · sandbox · answers ConsumerCoolingOffRescind@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6SRFJT3PN653372 (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 — Consumer.coolingOffRescinded@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.coolingOffRescind()curl -X POST https://apis.vin/consumers/cooling-off-rescind \
-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": "ConsumerCoolingOffRescind@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"rescission": {
"status": "no-deal-on-file",
"vin": "1HGCM82633A004352"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"rescission": {
"status": "no-deal-on-file",
"vin": "1HGCM82633A004352"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}garage
consumer.garage · GET /consumers/garage · gate key · sandbox · answers ConsumerGarage@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C6SRFJT3PN653372 (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 { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.garage({"vin":"1C6SRFJT3PN653372"})curl 'https://apis.vin/consumers/garage?vin=1C6SRFJT3PN653372'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": "ConsumerGarage@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"garage": {
"vehicles": [
{
"vin": "1FKEEPREG1STERED0",
"keepPosition": "Registered",
"mileage": 61190
},
{
"vin": "1FKEEPVER1F1ED000",
"keepPosition": "OwnershipVerified",
"mileage": 73109
}
]
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"garage": {
"vehicles": [
{
"vin": "1FKEEPREG1STERED0",
"keepPosition": "Registered",
"mileage": 61190
},
{
"vin": "1FKEEPVER1F1ED000",
"keepPosition": "OwnershipVerified",
"mileage": 73109
}
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}identityProof
consumer.identityProof · POST /consumers/identity-proof · gate offer · sandbox · answers ConsumerIdentityProof@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) · /1C6SRFJT3PN653372 (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 — Consumer.identityProofed@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.identityProof({"vin":"1C6SRFJT3PN653372"})curl -X POST https://apis.vin/consumers/identity-proof \
-H 'content-type: application/json' \
-d '{"vin":"1C6SRFJT3PN653372"}'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": "ConsumerIdentityProof@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"proof": {
"status": "proofed",
"verified": true
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"proof": {
"status": "proofed",
"verified": true
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}kyc
consumer.kyc · POST /consumers/kyc · gate offer · sandbox · answers ConsumerKyc@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) · /1C6SRFJT3PN653372 (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 — Consumer.kycRun@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.kyc({"vin":"1C6SRFJT3PN653372"})curl -X POST https://apis.vin/consumers/kyc \
-H 'content-type: application/json' \
-d '{"vin":"1C6SRFJT3PN653372"}'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": "ConsumerKyc@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"kyc": {
"outcome": "clear",
"ofac": "clear"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"kyc": {
"outcome": "clear",
"ofac": "clear"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}optOut
consumer.optOut · POST /consumers/opt-out · gate offer · sandbox · answers ConsumerOptOut@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) · /1C6SRFJT3PN653372 (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 — Consumer.optedOut@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.optOut({"vin":"1C6SRFJT3PN653372"})curl -X POST https://apis.vin/consumers/opt-out \
-H 'content-type: application/json' \
-d '{"vin":"1C6SRFJT3PN653372"}'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": "ConsumerOptOut@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"optOut": {
"status": "opt-out-recorded",
"identityId": "ID-11f17424"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"optOut": {
"status": "opt-out-recorded",
"identityId": "ID-11f17424"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}prequalify
consumer.prequalify · POST /consumers/prequalify · gate offer · sandbox · answers ConsumerPrequalify@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) · /1C6SRFJT3PN653372 (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 — Consumer.prequalified@1.
import { consumer } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.prequalify({"vin":"1C6SRFJT3PN653372"})curl -X POST https://apis.vin/consumers/prequalify \
-H 'content-type: application/json' \
-d '{"vin":"1C6SRFJT3PN653372"}'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": "ConsumerPrequalify@1",
"value": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"prequalification": {
"decision": "approved",
"rateBand": "best",
"stipulations": [],
"score": 843,
"tier": "super-prime"
}
},
"evidence": {
"partyId": "ID-11f17424",
"type": "person",
"name": "Ava Good",
"identifiers": [
{
"kind": "cast-key",
"value": "ava-good"
}
],
"roles": [
{
"role": "customer"
}
],
"status": "active",
"noun": "consumer",
"asOf": "2026-08-10",
"identityId": "ID-11f17424",
"prequalification": {
"decision": "approved",
"rateBand": "best",
"stipulations": [],
"score": 843,
"tier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "identity-comms-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.
Customer
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
party | consumer | ISA | is-a |
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.
Consumer · Class model
Consumer · State machine
Consumer · 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.
connection
The connection noun — identity, lifecycle, events, and every capability as an anchored section: 16 capabilities, 0 live, 16 sandbox, 0 declared.
contractsInTransit
The contractsInTransit noun — identity, lifecycle, events, and every capability as an anchored section: 5 capabilities, 0 live, 5 sandbox, 0 declared.