registration
The registration noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 1 live, 13 sandbox, 0 declared.
registration is one of the estate's 317 automotive nouns — a job a car needs done. It carries 14 capabilities: 1 live, 13 sandbox, 0 declared · doors registration.vin · aggregator.vin.
Identity
| Noun | registration |
| Pillar | Services (facets: 4 data · 8 services · 2 commerce) |
| Capabilities | 14 — 1 live · 13 sandbox · 0 declared |
| Entities | Registration |
| Doors | aggregator.vin · registration.vin |
| SDK | Vin.registration.* from apis.vin |
| Address | /catalog/registration#{action} — the anchor IS the wire name minus registration. |
Lifecycle
Registration — RegFSM: 4 states, 4 transitions — Active · Renewed · Lapsing · Expired. Each transition is a past-tense event on the record.
Events
The vocabulary this noun can append to the record — 27 past-tense, versioned event types, each linked to the capability that emits it:
Registration.created@1— emitted bynewRegistration.expired@1— emitted byremindRegistration.failed@1— emitted bypay·renewRegistration.feeCalculated@1— emitted bycalcRegistration.feeCharged@1— emitted byfeeRegistration.feeRequested@1— emitted byfeeRegistration.newRequested@1— emitted bynewRegistration.nonResidentRegistered@1— emitted bynonResidentMilitaryRegistration.paid@1— emitted bypayRegistration.payFailed@1— emitted bypayRegistration.payRequested@1— emitted bypayRegistration.proofIssued@1— emitted byproofRegistration.proofRequested@1— emitted byproofRegistration.proofed@1— emitted byproofRegistration.reminded@1— emitted byremindRegistration.renewRequested@1— emitted byrenewRegistration.renewed@1— emitted byrenewRegistration.subscribed@1— emitted bysubscribeRegistration.suspendRequested@1— emitted bysuspendRegistration.suspended@1— emitted bysuspendRegistration.transferFailed@1— emitted bytransferRegistration.transferRequested@1— emitted bytransferRegistration.transferred@1— emitted bytransferRegistration.tribalPlated@1— emitted bytribalPlateServiceOrder.settled@1— emitted byrenewTitleWork.ordered@1— emitted byrenewVehicle.registered@1— emitted byrenew
Discover & read
lookup
registration.lookup · GET /registrations/lookup · gate none · sandbox · answers RegistrationLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — registration.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.lookup({"vin":"1GC4KVEY9TF100140"})curl 'https://apis.vin/registrations/lookup?vin=1GC4KVEY9TF100140'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": "RegistrationLookup@1",
"value": {
"vin": "1GC4KVEY9TF100140",
"state": "AZ",
"onFile": true,
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z",
"status": "active"
},
"evidence": {
"vin": "1GC4KVEY9TF100140",
"state": "AZ",
"onFile": true,
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z",
"status": "active"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "title-registration-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}status
registration.status · GET /registrations/status · gate none · sandbox · answers RegistrationStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — registration.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.status({"vin":"1GC4KVEY9TF100140"})curl 'https://apis.vin/registrations/status?vin=1GC4KVEY9TF100140'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": "RegistrationStatus@1",
"value": {
"vin": "1GC4KVEY9TF100140",
"state": "AZ",
"status": "active",
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"evidence": {
"vin": "1GC4KVEY9TF100140",
"state": "AZ",
"status": "active",
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "title-registration-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
fee
registration.fee · POST /registrations/fee · gate offer · sandbox · answers RegistrationFee@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 — registration.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.feeCharged@1 · Registration.feeRequested@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.fee({"vin":"1GC4KVEY9TF100140"})curl -X POST https://apis.vin/registrations/fee \
-H 'content-type: application/json' \
-d '{"vin":"1GC4KVEY9TF100140"}'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": "RegistrationFee@1",
"value": {
"estimateId": "TFE-1",
"state": "AZ",
"feeCents": 9000,
"lines": [
{
"code": "registration-fee",
"label": "Registration fee",
"amountCents": 6500
},
{
"code": "plate-fee",
"label": "Plate/transfer fee",
"amountCents": 2500
}
],
"currency": "USD"
},
"evidence": {
"estimateId": "TFE-1",
"state": "AZ",
"feeCents": 9000,
"lines": [
{
"code": "registration-fee",
"label": "Registration fee",
"amountCents": 6500
},
{
"code": "plate-fee",
"label": "Plate/transfer fee",
"amountCents": 2500
}
],
"currency": "USD"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "title-registration-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}calc
registration.calc · GET /registrations/calc · gate key · live · answers RegistrationCalc@1
Promoted — earned its own page: /catalog/registration.calc (computed on every regen: live on the wire + carries its own stateSet).
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — registration.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (the VIN lens).
Try it — live: answers on the wire today. A sandbox key still selects the deterministic simulated mode — drive the full outcome range with the magic triggers.
Emits — Registration.feeCalculated@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.calc({"vin":"1GC4KVEY9TF100140"})curl 'https://apis.vin/registrations/calc?vin=1GC4KVEY9TF100140'Apply & book
subscribe
registration.subscribe · POST /registrations/subscribe · gate key · sandbox · answers RegistrationSubscribe@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.subscribed@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.subscribe()curl -X POST https://apis.vin/registrations/subscribe \
-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": "RegistrationSubscribe@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "registration",
"asOf": "2026-08-10",
"registration": {
"status": "no-registration-on-file"
},
"subscription": {
"status": "no-registration-on-file"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "registration",
"asOf": "2026-08-10",
"registration": {
"status": "no-registration-on-file"
},
"subscription": {
"status": "no-registration-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "renewal-counter-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
registration.pay · POST /registrations/pay · gate offer · sandbox · answers RegistrationPay@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 — registration.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.failed@1 · Registration.paid@1 · Registration.payFailed@1 · Registration.payRequested@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.pay({"vin":"1GC4KVEY9TF100140"})curl -X POST https://apis.vin/registrations/pay \
-H 'content-type: application/json' \
-d '{"vin":"1GC4KVEY9TF100140"}'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": "RegistrationPay@1",
"value": {
"vin": "1GC4KVEY9TF100140",
"noun": "registration",
"asOf": "2026-08-10",
"id": "REG-a4aeec7e",
"state": "AZ",
"status": "Active",
"payment": {
"status": "paid",
"id": "REG-a4aeec7e",
"feeCents": 9000,
"estimateId": "TFE-1",
"currency": "USD",
"basis": "posted-registration-fee"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1GC4KVEY9TF100140",
"noun": "registration",
"asOf": "2026-08-10",
"id": "REG-a4aeec7e",
"state": "AZ",
"status": "Active",
"payment": {
"status": "paid",
"id": "REG-a4aeec7e",
"feeCents": 9000,
"estimateId": "TFE-1",
"currency": "USD",
"basis": "posted-registration-fee"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "renewal-counter-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
remind
registration.remind · POST /registrations/remind · gate key · sandbox · answers RegistrationRemind@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | subject VIN — keys the registration whose RegFSM position the answer states |
asOf | string | no | format date-time; observation instant (≡ the x-world-as-of header); the answer states the world AT this instant — absent, at, or before the fixed as-of answers the unmoved world |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.reminded@1 · Registration.expired@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.remind({"vin":"1GC4KVEY9TF100140","asOf":"asof"})curl -X POST https://apis.vin/registrations/remind \
-H 'content-type: application/json' \
-d '{"vin":"1GC4KVEY9TF100140","asOf":"asof"}'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": "RegistrationRemind@1",
"value": {
"vin": "1GC4KVEY9TF100140",
"noun": "registration",
"asOf": "2026-08-10",
"id": "REG-a4aeec7e",
"state": "AZ",
"status": "Active",
"reminder": {
"status": "nothing-due"
}
},
"evidence": {
"vin": "1GC4KVEY9TF100140",
"noun": "registration",
"asOf": "2026-08-10",
"id": "REG-a4aeec7e",
"state": "AZ",
"status": "Active",
"reminder": {
"status": "nothing-due"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "renewal-counter-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Lifecycle & state
renew
registration.renew · POST /registrations/renew · gate offer · sandbox · answers RegistrationOrder@1
Promoted — earned its own page: /catalog/registration.renew (computed on every regen: price posted + carries its own stateSet).
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
state | string | yes | — |
plate | string | no | — |
work | string | no | one of renewal, new-plate, transfer-plate, temp-tag |
authority | 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: posted at /pricing.
Delegated calls require a typed Mandate — { ceiling, perAction, expires, tripwires }; the ceiling is a field, not a conversation.
Door — registration.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.failed@1 · Registration.renewRequested@1 · Registration.renewed@1 · ServiceOrder.settled@1 · TitleWork.ordered@1 · Vehicle.registered@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.renew({"vin":"1GC4KVEY9TF100140","state":"state"})curl -X POST https://apis.vin/registrations/renew \
-H 'content-type: application/json' \
-d '{"vin":"1GC4KVEY9TF100140","state":"state"}'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": "RegistrationOrder@1",
"value": {
"vin": "1GC4KVEY9TF100140",
"state": "state",
"renewed": true,
"plate": "state-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z",
"status": "Active"
},
"evidence": {
"vin": "1GC4KVEY9TF100140",
"state": "state",
"renewed": true,
"plate": "state-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z",
"status": "Active"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "title-registration-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": true
}
}transfer
registration.transfer · POST /registrations/transfer · gate offer · sandbox · answers RegistrationTransfer@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 — registration.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.transferFailed@1 · Registration.transferRequested@1 · Registration.transferred@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.transfer({"vin":"1GC4KVEY9TF100140"})curl -X POST https://apis.vin/registrations/transfer \
-H 'content-type: application/json' \
-d '{"vin":"1GC4KVEY9TF100140"}'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": "RegistrationTransfer@1",
"value": {
"vin": "1GC4KVEY9TF100140",
"fromState": "CA",
"toState": "AZ",
"transferred": true,
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"evidence": {
"vin": "1GC4KVEY9TF100140",
"fromState": "CA",
"toState": "AZ",
"transferred": true,
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "title-registration-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}suspend
registration.suspend · POST /registrations/suspend · gate offer · sandbox · answers RegistrationSuspend@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 — registration.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.suspendRequested@1 · Registration.suspended@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.suspend({"vin":"1GC4KVEY9TF100140"})curl -X POST https://apis.vin/registrations/suspend \
-H 'content-type: application/json' \
-d '{"vin":"1GC4KVEY9TF100140"}'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": "RegistrationSuspend@1",
"value": {
"vin": "1GC4KVEY9TF100140",
"noun": "registration",
"asOf": "2026-08-10",
"id": "REG-a4aeec7e",
"state": "AZ",
"status": "Active",
"suspension": {
"status": "suspend-recorded",
"id": "REG-a4aeec7e",
"position": "Active"
}
},
"evidence": {
"vin": "1GC4KVEY9TF100140",
"noun": "registration",
"asOf": "2026-08-10",
"id": "REG-a4aeec7e",
"state": "AZ",
"status": "Active",
"suspension": {
"status": "suspend-recorded",
"id": "REG-a4aeec7e",
"position": "Active"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "renewal-counter-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
new
registration.new · POST /registrations/new · gate offer · sandbox · answers RegistrationNew@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 — registration.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.created@1 · Registration.newRequested@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.new({"vin":"1GC4KVEY9TF100140"})curl -X POST https://apis.vin/registrations/new \
-H 'content-type: application/json' \
-d '{"vin":"1GC4KVEY9TF100140"}'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": "RegistrationNew@1",
"value": {
"vin": "1GC4KVEY9TF100140",
"state": "AZ",
"registered": true,
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z",
"status": "Active"
},
"evidence": {
"vin": "1GC4KVEY9TF100140",
"state": "AZ",
"registered": true,
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z",
"status": "Active"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "title-registration-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}nonResidentMilitary
registration.nonResidentMilitary · POST /registrations/non-resident-military · gate key · sandbox · answers RegistrationNonResidentMilitary@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.nonResidentRegistered@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.nonResidentMilitary()curl -X POST https://apis.vin/registrations/non-resident-military \
-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": "RegistrationNonResidentMilitary@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "registration",
"asOf": "2026-08-10",
"registration": {
"status": "no-registration-on-file"
},
"exemption": {
"status": "no-residency-axis-posted"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "registration",
"asOf": "2026-08-10",
"registration": {
"status": "no-registration-on-file"
},
"exemption": {
"status": "no-residency-axis-posted"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "renewal-counter-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}proof
registration.proof · POST /registrations/proof · gate offer · sandbox · answers RegistrationProof@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 — registration.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.proofIssued@1 · Registration.proofRequested@1 · Registration.proofed@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.proof({"vin":"1GC4KVEY9TF100140"})curl -X POST https://apis.vin/registrations/proof \
-H 'content-type: application/json' \
-d '{"vin":"1GC4KVEY9TF100140"}'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": "RegistrationProof@1",
"value": {
"vin": "1GC4KVEY9TF100140",
"state": "AZ",
"proof": {
"docRef": "reg-proof:AZ:1GC4KVEY9TF100140",
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"status": "active"
},
"evidence": {
"vin": "1GC4KVEY9TF100140",
"state": "AZ",
"proof": {
"docRef": "reg-proof:AZ:1GC4KVEY9TF100140",
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"status": "active"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "title-registration-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}tribalPlate
registration.tribalPlate · POST /registrations/tribal-plate · gate key · sandbox · answers RegistrationTribalPlate@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1GC4KVEY9TF100140 (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 — Registration.tribalPlated@1.
import { registration } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await registration.tribalPlate()curl -X POST https://apis.vin/registrations/tribal-plate \
-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": "RegistrationTribalPlate@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "registration",
"asOf": "2026-08-10",
"registration": {
"status": "no-registration-on-file"
},
"tribalPlate": {
"status": "no-tribal-plate-stock-posted"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "registration",
"asOf": "2026-08-10",
"registration": {
"status": "no-registration-on-file"
},
"tribalPlate": {
"status": "no-tribal-plate-stock-posted"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "renewal-counter-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.
Registration
Schema
| Property | Type |
|---|---|
id | id |
vin | string |
state | UsState |
plate | string |
class | string |
expiresAt | date |
status | RegFSM |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
vehicle | registration | 1:0..* | registered |
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 5 diagrams, rendered from the estate model.
Registration · Class model
Registration · State machine
Registration · State machine
Registration · State machine
Registration · Sequence
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.