docs.vin

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

Nounconsumer
PillarServices (facets: 6 data · 9 services · 3 commerce)
Capabilities18 — 0 live · 18 sandbox · 0 declared
EntitiesCustomer
Doorsaggregator.vin
SDKVin.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:

Discover & read

lookup

consumer.lookup · GET /consumers/lookup · gate none · sandbox · answers ConsumerLookup@1

FieldTypeRequiredNotes
vinstringno

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

the SDK — consumer.lookup
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"})
GET /consumers/lookup
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.

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

FieldTypeRequiredNotes
vinstringno

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

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

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — consumer.history
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"})
GET /consumers/history
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.

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

FieldTypeRequiredNotes
vinstringno

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

the SDK — consumer.consentStatus
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"})
GET /consumers/consent-status
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.

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

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

EmitsConsumer.registered@1.

the SDK — consumer.register
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"})
POST /consumers/register
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.

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

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

EmitsConsumer.failed@1 · Consumer.paid@1.

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

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

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

EmitsConsumer.deposited@1 · Consumer.failed@1.

the SDK — consumer.deposit
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"})
POST /consumers/deposit
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.

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

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

EmitsConsumer.failed@1 · Consumer.refunded@1.

the SDK — consumer.refund
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"})
POST /consumers/refund
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.

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

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

EmitsConsumer.consentCaptured@1.

the SDK — consumer.consentCapture
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"})
POST /consumers/consent-capture
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.

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

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

EmitsConsumer.accessibleDisclosured@1.

the SDK — consumer.accessibleDisclosure
import { consumer } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.accessibleDisclosure()
POST /consumers/accessible-disclosure
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.

receipt · executed 2026-08-16T14:50:09.710Z · HTTP 200
{
  "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.

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

EmitsConsumer.accessibleTestDriven@1.

the SDK — consumer.accessibleTestDrive
import { consumer } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.accessibleTestDrive()
POST /consumers/accessible-test-drive
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.

receipt · executed 2026-08-16T14:50:09.710Z · HTTP 200
{
  "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.

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

the SDK — consumer.consentReceipt
import { consumer } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.consentReceipt()
GET /consumers/consent-receipt
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.

receipt · executed 2026-08-16T14:50:09.711Z · HTTP 200
{
  "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.

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

EmitsConsumer.coolingOffRescinded@1.

the SDK — consumer.coolingOffRescind
import { consumer } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await consumer.coolingOffRescind()
POST /consumers/cooling-off-rescind
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.

receipt · executed 2026-08-16T14:50:09.711Z · HTTP 200
{
  "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

FieldTypeRequiredNotes
vinstringno

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

the SDK — consumer.garage
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"})
GET /consumers/garage
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.

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

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

EmitsConsumer.identityProofed@1.

the SDK — consumer.identityProof
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"})
POST /consumers/identity-proof
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.

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

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

EmitsConsumer.kycRun@1.

the SDK — consumer.kyc
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"})
POST /consumers/kyc
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.

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

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

EmitsConsumer.optedOut@1.

the SDK — consumer.optOut
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"})
POST /consumers/opt-out
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.

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

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

EmitsConsumer.prequalified@1.

the SDK — consumer.prequalify
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"})
POST /consumers/prequalify
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.

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

FromToCardinalityAs
partyconsumerISAis-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.