plate
The plate noun — identity, lifecycle, events, and every capability as an anchored section: 11 capabilities, 3 live, 8 sandbox, 0 declared.
plate is one of the estate's 317 automotive nouns — a job a car needs done. It carries 11 capabilities: 3 live, 8 sandbox, 0 declared · doors aggregator.vin · plate.vin.
Identity
| Noun | plate |
| Pillar | Services (facets: 4 data · 5 services · 2 commerce) |
| Capabilities | 11 — 3 live · 8 sandbox · 0 declared |
| Entities | Plate |
| Doors | aggregator.vin · plate.vin |
| SDK | Vin.plate.* from apis.vin |
| Address | /catalog/plate#{action} — the anchor IS the wire name minus plate. |
Events
The vocabulary this noun can append to the record — 20 past-tense, versioned event types, each linked to the capability that emits it:
Plate.failed@1— emitted bypersonalized·replacePlate.feeCharged@1— emitted byfeePlate.feeRequested@1— emitted byfeePlate.issueFailed@1— emitted byissuePlate.issueRequested@1— emitted byissuePlate.issued@1— emitted byissuePlate.paid@1— emitted bypayPlate.payFailed@1— emitted bypayPlate.payRequested@1— emitted bypayPlate.personalized@1— emitted bypersonalizedPlate.personalizedOrdered@1— emitted bypersonalizedPlate.personalizedRequested@1— emitted bypersonalizedPlate.replaceFailed@1— emitted byreplacePlate.replaceRequested@1— emitted byreplacePlate.replaced@1— emitted byreplacePlate.surrenderRequested@1— emitted bysurrenderPlate.surrendered@1— emitted bysurrenderPlate.transferFailed@1— emitted bytransferPlate.transferRequested@1— emitted bytransferPlate.transferred@1— emitted bytransfer
Discover & read
lookup
plate.lookup · GET /plates/lookup · gate none · live · answers PlateLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — plate.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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.
import { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.lookup({"vin":"1GT49PEY3RF437032"})curl 'https://apis.vin/plates/lookup?vin=1GT49PEY3RF437032'status
plate.status · GET /plates/status · gate none · sandbox · answers PlateStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — plate.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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 { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.status({"vin":"1GT49PEY3RF437032"})curl 'https://apis.vin/plates/status?vin=1GT49PEY3RF437032'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": "PlateStatus@1",
"value": {
"vin": "1GT49PEY3RF437032",
"state": "AZ",
"plate": "AZ-TTL1",
"plateStatus": "active",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"evidence": {
"vin": "1GT49PEY3RF437032",
"state": "AZ",
"plate": "AZ-TTL1",
"plateStatus": "active",
"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
plate.fee · POST /plates/fee · gate offer · sandbox · answers PlateFee@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 — plate.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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 — Plate.feeCharged@1 · Plate.feeRequested@1.
import { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.fee({"vin":"1GT49PEY3RF437032"})curl -X POST https://apis.vin/plates/fee \
-H 'content-type: application/json' \
-d '{"vin":"1GT49PEY3RF437032"}'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": "PlateFee@1",
"value": {
"vin": "1GT49PEY3RF437032",
"noun": "plate",
"asOf": "2026-08-10",
"plateRecord": {
"status": "no-plate-on-file"
},
"fee": {
"status": "no-plate-fee-posted"
}
},
"evidence": {
"vin": "1GT49PEY3RF437032",
"noun": "plate",
"asOf": "2026-08-10",
"plateRecord": {
"status": "no-plate-on-file"
},
"fee": {
"status": "no-plate-fee-posted"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "tag-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
plate.pay · POST /plates/pay · gate offer · sandbox · answers PlatePay@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 — plate.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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 — Plate.paid@1 · Plate.payFailed@1 · Plate.payRequested@1.
import { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.pay({"vin":"1GT49PEY3RF437032"})curl -X POST https://apis.vin/plates/pay \
-H 'content-type: application/json' \
-d '{"vin":"1GT49PEY3RF437032"}'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": "PlatePay@1",
"value": {
"vin": "1GT49PEY3RF437032",
"noun": "plate",
"asOf": "2026-08-10",
"plateRecord": {
"status": "no-plate-on-file"
},
"payment": {
"status": "no-plate-fee-posted"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1GT49PEY3RF437032",
"noun": "plate",
"asOf": "2026-08-10",
"plateRecord": {
"status": "no-plate-on-file"
},
"payment": {
"status": "no-plate-fee-posted"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "tag-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
replace
plate.replace · POST /plates/replace · gate offer · sandbox · answers PlateReplace@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 — plate.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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 — Plate.failed@1 · Plate.replaceFailed@1 · Plate.replaceRequested@1 · Plate.replaced@1.
import { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.replace({"vin":"1GT49PEY3RF437032"})curl -X POST https://apis.vin/plates/replace \
-H 'content-type: application/json' \
-d '{"vin":"1GT49PEY3RF437032"}'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": "PlateReplace@1",
"value": {
"vin": "1GT49PEY3RF437032",
"state": "AZ",
"replaced": true,
"oldPlate": "AZ-TTL1",
"plate": "AZ-TTL1-R",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"evidence": {
"vin": "1GT49PEY3RF437032",
"state": "AZ",
"replaced": true,
"oldPlate": "AZ-TTL1",
"plate": "AZ-TTL1-R",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "title-registration-rail-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}issue
plate.issue · POST /plates/issue · gate offer · sandbox · answers PlateIssue@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 — plate.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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 — Plate.issueFailed@1 · Plate.issueRequested@1 · Plate.issued@1.
import { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.issue({"vin":"1GT49PEY3RF437032"})curl -X POST https://apis.vin/plates/issue \
-H 'content-type: application/json' \
-d '{"vin":"1GT49PEY3RF437032"}'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": "PlateIssue@1",
"value": {
"vin": "1GT49PEY3RF437032",
"state": "AZ",
"issued": true,
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"evidence": {
"vin": "1GT49PEY3RF437032",
"state": "AZ",
"issued": 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
}
}Lifecycle & state
transfer
plate.transfer · POST /plates/transfer · gate offer · sandbox · answers PlateTransfer@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 — plate.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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 — Plate.transferFailed@1 · Plate.transferRequested@1 · Plate.transferred@1.
import { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.transfer({"vin":"1GT49PEY3RF437032"})curl -X POST https://apis.vin/plates/transfer \
-H 'content-type: application/json' \
-d '{"vin":"1GT49PEY3RF437032"}'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": "PlateTransfer@1",
"value": {
"vin": "1GT49PEY3RF437032",
"state": "AZ",
"transferred": true,
"plate": "AZ-TTL1",
"registrationExpires": "2027-08-10T00:00:00.000Z"
},
"evidence": {
"vin": "1GT49PEY3RF437032",
"state": "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
}
}More actions
decodeToVin
plate.decodeToVin · GET /plates/decode-to-vin · gate none · live · answers PlateDecodeToVin@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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.
import { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.decodeToVin()curl 'https://apis.vin/plates/decode-to-vin'personalized
plate.personalized · POST /plates/personalized · gate offer · sandbox · answers PlatePersonalized@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 — plate.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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 — Plate.failed@1 · Plate.personalizedOrdered@1 · Plate.personalizedRequested@1 · Plate.personalized@1.
import { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.personalized({"vin":"1GT49PEY3RF437032"})curl -X POST https://apis.vin/plates/personalized \
-H 'content-type: application/json' \
-d '{"vin":"1GT49PEY3RF437032"}'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": "PlatePersonalized@1",
"value": {
"vin": "1GT49PEY3RF437032",
"noun": "plate",
"asOf": "2026-08-10",
"plateRecord": {
"status": "no-plate-on-file"
},
"order": {
"status": "no-plate-menu-posted"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1GT49PEY3RF437032",
"noun": "plate",
"asOf": "2026-08-10",
"plateRecord": {
"status": "no-plate-on-file"
},
"order": {
"status": "no-plate-menu-posted"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "tag-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}surrender
plate.surrender · POST /plates/surrender · gate offer · sandbox · answers PlateSurrender@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 — plate.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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 — Plate.surrenderRequested@1 · Plate.surrendered@1.
import { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.surrender({"vin":"1GT49PEY3RF437032"})curl -X POST https://apis.vin/plates/surrender \
-H 'content-type: application/json' \
-d '{"vin":"1GT49PEY3RF437032"}'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": "PlateSurrender@1",
"value": {
"vin": "1GT49PEY3RF437032",
"noun": "plate",
"asOf": "2026-08-10",
"plateRecord": {
"status": "no-plate-on-file"
},
"surrender": {
"status": "no-plate-on-file"
}
},
"evidence": {
"vin": "1GT49PEY3RF437032",
"noun": "plate",
"asOf": "2026-08-10",
"plateRecord": {
"status": "no-plate-on-file"
},
"surrender": {
"status": "no-plate-on-file"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "tag-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}toVin
plate.toVin · GET /plates/to-vin · gate key · live · answers PlateLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
plate | string | yes | — |
state | string | yes | length 2–2 |
Door — plate.vin serves this noun on its two routes: / (the landing) · /1GT49PEY3RF437032 (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.
import { plate } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await plate.toVin({"plate":"plate","state":"state"})curl 'https://apis.vin/plates/to-vin?plate=plate&state=state'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.
Plate
Schema
| Property | Type |
|---|---|
plate | string |
state | UsState |
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.