docs.vin

title

The title noun — identity, lifecycle, events, and every capability as an anchored section: 25 capabilities, 0 live, 25 sandbox, 0 declared.

title is one of the estate's 317 automotive nouns — a job a car needs done. It carries 25 capabilities: 0 live, 25 sandbox, 0 declared · doors title.vin · aggregator.vin.

Identity

Nountitle
PillarServices (facets: 8 data · 14 services · 3 commerce)
Capabilities25 — 0 live · 25 sandbox · 0 declared
EntitiesTitle
Doorsaggregator.vin · title.vin
SDKVin.title.* from apis.vin
Address/catalog/title#{action} — the anchor IS the wire name minus title.

Lifecycle

TitleTitleFSM: 7 states, 7 transitions — Ordered · Applied · Pending · Issued · Branded · Transferred · Released. Each transition is a past-tense event on the record.

Events

The vocabulary this noun can append to the record — 50 past-tense, versioned event types, each linked to the capability that emits it:

Discover & read

lookup

title.lookup · GET /titles/lookup · gate none · sandbox · answers TitleLookup@1

FieldTypeRequiredNotes
vinstringno

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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 — title.lookup
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.lookup({"vin":"4S4GUHM69T3775945"})
GET /titles/lookup
curl 'https://apis.vin/titles/lookup?vin=4S4GUHM69T3775945'

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:18.272Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleLookup@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "titleStatus": "clear",
    "filingType": "paper",
    "onFile": true
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "titleStatus": "clear",
    "filingType": "paper",
    "onFile": true
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

decode

title.decode · GET /titles/decode · gate key · sandbox · answers TitleDecode@1

FieldTypeRequiredNotes
vinstringno

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.decoded@1.

the SDK — title.decode
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.decode({"vin":"4S4GUHM69T3775945"})
GET /titles/decode
curl 'https://apis.vin/titles/decode?vin=4S4GUHM69T3775945'

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:18.265Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleDecode@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "titleStatus": "clear",
    "branded": false,
    "lienPresent": false,
    "clean": true
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "titleStatus": "clear",
    "branded": false,
    "lienPresent": false,
    "clean": true
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

status

title.status · GET /titles/status · gate none · sandbox · answers TitleStatus@1

FieldTypeRequiredNotes
vinstringno

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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 — title.status
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.status({"vin":"4S4GUHM69T3775945"})
GET /titles/status
curl 'https://apis.vin/titles/status?vin=4S4GUHM69T3775945'

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:18.296Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleStatus@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "titleStatus": "clear",
    "complete": true,
    "checklist": [
      {
        "key": "odometer-disclosure",
        "label": "Odometer disclosure",
        "required": true,
        "satisfied": true
      },
      {
        "key": "proof-of-ownership",
        "label": "Proof of ownership / prior title",
        "required": true,
        "satisfied": true
      },
      {
        "key": "lien-release",
        "label": "Lien release (ELT)",
        "required": false,
        "satisfied": false
      },
      {
        "key": "brand-disclosure",
        "label": "Salvage/brand disclosure",
        "required": false,
        "satisfied": false
      }
    ]
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "titleStatus": "clear",
    "complete": true,
    "checklist": [
      {
        "key": "odometer-disclosure",
        "label": "Odometer disclosure",
        "required": true,
        "satisfied": true
      },
      {
        "key": "proof-of-ownership",
        "label": "Proof of ownership / prior title",
        "required": true,
        "satisfied": true
      },
      {
        "key": "lien-release",
        "label": "Lien release (ELT)",
        "required": false,
        "satisfied": false
      },
      {
        "key": "brand-disclosure",
        "label": "Salvage/brand disclosure",
        "required": false,
        "satisfied": false
      }
    ]
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

verify

title.verify · GET /titles/verify · gate none · sandbox · answers TitleVerify@1

FieldTypeRequiredNotes
vinstringno

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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 — title.verify
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.verify({"vin":"4S4GUHM69T3775945"})
GET /titles/verify
curl 'https://apis.vin/titles/verify?vin=4S4GUHM69T3775945'

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:18.303Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleVerify@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "titleStatus": "clear",
    "verified": true,
    "clean": true,
    "complete": true,
    "checklist": [
      {
        "key": "odometer-disclosure",
        "label": "Odometer disclosure",
        "required": true,
        "satisfied": true
      },
      {
        "key": "proof-of-ownership",
        "label": "Proof of ownership / prior title",
        "required": true,
        "satisfied": true
      },
      {
        "key": "lien-release",
        "label": "Lien release (ELT)",
        "required": false,
        "satisfied": false
      },
      {
        "key": "brand-disclosure",
        "label": "Salvage/brand disclosure",
        "required": false,
        "satisfied": false
      }
    ]
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "titleStatus": "clear",
    "verified": true,
    "clean": true,
    "complete": true,
    "checklist": [
      {
        "key": "odometer-disclosure",
        "label": "Odometer disclosure",
        "required": true,
        "satisfied": true
      },
      {
        "key": "proof-of-ownership",
        "label": "Proof of ownership / prior title",
        "required": true,
        "satisfied": true
      },
      {
        "key": "lien-release",
        "label": "Lien release (ELT)",
        "required": false,
        "satisfied": false
      },
      {
        "key": "brand-disclosure",
        "label": "Salvage/brand disclosure",
        "required": false,
        "satisfied": false
      }
    ]
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

brandLookup

title.brandLookup · GET /titles/brand-lookup · gate none · sandbox · answers TitleBrandLookup@1

FieldTypeRequiredNotes
vinstringno

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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 — title.brandLookup
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.brandLookup({"vin":"4S4GUHM69T3775945"})
GET /titles/brand-lookup
curl 'https://apis.vin/titles/brand-lookup?vin=4S4GUHM69T3775945'

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:18.262Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleBrandLookup@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "brands": [],
    "count": 0,
    "titleStatus": "clear"
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "brands": [],
    "count": 0,
    "titleStatus": "clear"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

jumpTitleDetect

title.jumpTitleDetect · GET /titles/jump-title-detect · gate none · sandbox · answers TitleJumpTitleDetect@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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 — title.jumpTitleDetect
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.jumpTitleDetect()
GET /titles/jump-title-detect
curl 'https://apis.vin/titles/jump-title-detect'

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:10.068Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleJumpTitleDetect@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "title",
    "asOf": "2026-08-10",
    "detection": {
      "status": "no-title-on-file"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "title",
    "asOf": "2026-08-10",
    "detection": {
      "status": "no-title-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

quote

title.quote · POST /titles/quote · gate none · sandbox · answers TitleQuote@1

Promoted — earned its own page: /catalog/title.quote (computed on every regen: price posted + carries its own stateSet).

FieldTypeRequiredNotes
vinstringyes
workstringyesone of transfer, lien-release, correction, duplicate, bonded, out-of-state-convert
statestringyes

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.quoteRequested@1 · Title.quoted@1 · TitleWork.quoted@1.

the SDK — title.quote
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.quote({"vin":"4S4GUHM69T3775945","work":"transfer","state":"state"})
POST /titles/quote
curl -X POST https://apis.vin/titles/quote \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945","work":"transfer","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.

receipt · executed 2026-08-17T12:42:18.291Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleQuote@1",
  "value": {
    "quoteId": "TFE-1",
    "state": "state",
    "filingType": "paper",
    "lineItems": [
      {
        "code": "title-fee",
        "label": "Title fee",
        "amountCents": 1500
      },
      {
        "code": "registration-fee",
        "label": "Registration fee",
        "amountCents": 6500
      },
      {
        "code": "plate-fee",
        "label": "Plate/transfer fee",
        "amountCents": 2500
      },
      {
        "code": "doc-fee",
        "label": "Filing/doc fee",
        "amountCents": 8500
      }
    ],
    "totalCents": 19000,
    "currency": "USD"
  },
  "evidence": {
    "quoteId": "TFE-1",
    "state": "state",
    "filingType": "paper",
    "lineItems": [
      {
        "code": "title-fee",
        "label": "Title fee",
        "amountCents": 1500
      },
      {
        "code": "registration-fee",
        "label": "Registration fee",
        "amountCents": 6500
      },
      {
        "code": "plate-fee",
        "label": "Plate/transfer fee",
        "amountCents": 2500
      },
      {
        "code": "doc-fee",
        "label": "Filing/doc fee",
        "amountCents": 8500
      }
    ],
    "totalCents": 19000,
    "currency": "USD"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": true
  }
}

fee

title.fee · POST /titles/fee · gate offer · sandbox · answers TitleFee@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.feeCharged@1 · Title.feeRequested@1.

the SDK — title.fee
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.fee({"vin":"4S4GUHM69T3775945"})
POST /titles/fee
curl -X POST https://apis.vin/titles/fee \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.272Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleFee@1",
  "value": {
    "estimateId": "TFE-1",
    "state": "AZ",
    "filingType": "paper",
    "lines": [
      {
        "code": "title-fee",
        "label": "Title fee",
        "amountCents": 1500
      },
      {
        "code": "registration-fee",
        "label": "Registration fee",
        "amountCents": 6500
      },
      {
        "code": "plate-fee",
        "label": "Plate/transfer fee",
        "amountCents": 2500
      },
      {
        "code": "doc-fee",
        "label": "Filing/doc fee",
        "amountCents": 8500
      }
    ],
    "totalCents": 19000,
    "currency": "USD"
  },
  "evidence": {
    "estimateId": "TFE-1",
    "state": "AZ",
    "filingType": "paper",
    "lines": [
      {
        "code": "title-fee",
        "label": "Title fee",
        "amountCents": 1500
      },
      {
        "code": "registration-fee",
        "label": "Registration fee",
        "amountCents": 6500
      },
      {
        "code": "plate-fee",
        "label": "Plate/transfer fee",
        "amountCents": 2500
      },
      {
        "code": "doc-fee",
        "label": "Filing/doc fee",
        "amountCents": 8500
      }
    ],
    "totalCents": 19000,
    "currency": "USD"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

order

title.order · POST /titles/order · gate offer · sandbox · answers TitleWorkOrder@1

Promoted — earned its own page: /catalog/title.order (computed on every regen: price posted + carries its own stateSet).

FieldTypeRequiredNotes
vinstringyes
workstringyesone of transfer, lien-release, correction, duplicate, bonded, out-of-state-convert
statestringyes
quoteIdstringno
partiesobjectno
documentsarray<string>no
subjectstringno
authoritystringno

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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsServiceOrder.settled@1 · Title.completed@1 · Title.dispatched@1 · Title.failed@1 · Title.ordered@1 · Title.requested@1 · TitleWork.ordered@1 · TitleWork.submitted@1 · Vehicle.registered@1 · Vehicle.titled@1.

the SDK — title.order
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.order({"vin":"4S4GUHM69T3775945","work":"transfer","state":"state"})
POST /titles/order
curl -X POST https://apis.vin/titles/order \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945","work":"transfer","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.

receipt · executed 2026-08-17T12:42:18.277Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleWorkOrder@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "state": "state",
    "workOrder": {
      "orderId": "serviceorder_EMVh3MmY1dFQ",
      "titleNumber": "state-TTL-1",
      "filingType": "paper",
      "titleStatus": "clear"
    },
    "status": "Complete"
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "state": "state",
    "workOrder": {
      "orderId": "serviceorder_EMVh3MmY1dFQ",
      "titleNumber": "state-TTL-1",
      "filingType": "paper",
      "titleStatus": "clear"
    },
    "status": "Complete"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": true
  }
}

subscribe

title.subscribe · POST /titles/subscribe · gate key · sandbox · answers TitleSubscribe@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.subscribed@1.

the SDK — title.subscribe
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.subscribe()
POST /titles/subscribe
curl -X POST https://apis.vin/titles/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.

receipt · executed 2026-08-16T14:50:10.069Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleSubscribe@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "title",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "SUB-c571adbc",
      "titleId": "TTL-6eade2d4",
      "watching": "no-title-on-file",
      "status": "active"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "title",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "SUB-c571adbc",
      "titleId": "TTL-6eade2d4",
      "watching": "no-title-on-file",
      "status": "active"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

assign

title.assign · POST /titles/assign · gate offer · sandbox · answers TitleAssign@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.assignRequested@1 · Title.assigned@1.

the SDK — title.assign
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.assign({"vin":"4S4GUHM69T3775945"})
POST /titles/assign
curl -X POST https://apis.vin/titles/assign \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.244Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleAssign@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "assignment": {
      "status": "title-not-yet-issued",
      "position": "Ordered"
    }
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "assignment": {
      "status": "title-not-yet-issued",
      "position": "Ordered"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

title.pay · POST /titles/pay · gate offer · sandbox · answers TitlePay@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.failed@1 · Title.paid@1 · Title.payFailed@1 · Title.payRequested@1.

the SDK — title.pay
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.pay({"vin":"4S4GUHM69T3775945"})
POST /titles/pay
curl -X POST https://apis.vin/titles/pay \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.282Z · HTTP 200
{
  "type": "OK",
  "answers": "TitlePay@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "payment": {
      "id": "PAY-67cf919c",
      "amountCents": 19000,
      "currency": "USD",
      "status": "settled"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "payment": {
      "id": "PAY-67cf919c",
      "amountCents": 19000,
      "currency": "USD",
      "status": "settled"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

transfer

title.transfer · POST /titles/transfer · gate offer · sandbox · answers TitleTransfer@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.transferFailed@1 · Title.transferRequested@1 · Title.transferred@1.

the SDK — title.transfer
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.transfer({"vin":"4S4GUHM69T3775945"})
POST /titles/transfer
curl -X POST https://apis.vin/titles/transfer \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.303Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleTransfer@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "titled": true,
    "status": "Complete",
    "titleNumber": "AZ-TTL-1",
    "filingType": "paper",
    "titleStatus": "clear"
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "titled": true,
    "status": "Complete",
    "titleNumber": "AZ-TTL-1",
    "filingType": "paper",
    "titleStatus": "clear"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

release

title.release · POST /titles/release · gate offer · sandbox · answers TitleRelease@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsEndOfLife.titleReleased@1 · Title.lienReleased@1 · Title.releaseFailed@1 · Title.releaseRequested@1 · Title.released@1.

the SDK — title.release
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.release({"vin":"4S4GUHM69T3775945"})
POST /titles/release
curl -X POST https://apis.vin/titles/release \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.295Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleRelease@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "lienReleased": true,
    "status": "Complete",
    "titleNumber": "AZ-TTL-1",
    "lienholder": "lienholder-of-record",
    "titleStatus": "clear"
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "lienReleased": true,
    "status": "Complete",
    "titleNumber": "AZ-TTL-1",
    "lienholder": "lienholder-of-record",
    "titleStatus": "clear"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [
    "EndOfLife.titleReleased@1",
    "Title.lienReleased@1"
  ],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

brandDisclose

title.brandDisclose · POST /titles/brand-disclose · gate offer · sandbox · answers TitleBrandDisclose@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.brandDisclosed@1.

the SDK — title.brandDisclose
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.brandDisclose({"vin":"4S4GUHM69T3775945"})
POST /titles/brand-disclose
curl -X POST https://apis.vin/titles/brand-disclose \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.262Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleBrandDisclose@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "disclosure": {
      "required": false,
      "brands": [],
      "titleStatus": "clear",
      "position": "Ordered"
    }
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "disclosure": {
      "required": false,
      "brands": [],
      "titleStatus": "clear",
      "position": "Ordered"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

bonded

title.bonded · POST /titles/bonded · gate offer · sandbox · answers TitleBonded@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.bondedProcessed@1 · Title.bondedRequested@1.

the SDK — title.bonded
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.bonded({"vin":"4S4GUHM69T3775945"})
POST /titles/bonded
curl -X POST https://apis.vin/titles/bonded \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.250Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleBonded@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "bond": {
      "status": "title-already-on-file",
      "titleId": "TTL-2712918a",
      "position": "Ordered"
    }
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "bond": {
      "status": "title-already-on-file",
      "titleId": "TTL-2712918a",
      "position": "Ordered"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

brand

title.brand · POST /titles/brand · gate offer · sandbox · answers TitleBrand@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.branded@1.

the SDK — title.brand
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.brand({"vin":"4S4GUHM69T3775945"})
POST /titles/brand
curl -X POST https://apis.vin/titles/brand \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.251Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleBrand@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "filing": {
      "status": "title-not-yet-issued",
      "position": "Ordered"
    }
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "filing": {
      "status": "title-not-yet-issued",
      "position": "Ordered"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

chain

title.chain · GET /titles/chain · gate none · sandbox · answers TitleChain@1

FieldTypeRequiredNotes
vinstringno

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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 — title.chain
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.chain({"vin":"4S4GUHM69T3775945"})
GET /titles/chain
curl 'https://apis.vin/titles/chain?vin=4S4GUHM69T3775945'

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:18.262Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleChain@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "chain": [
      {
        "link": 1,
        "holder": "prior-owner",
        "titleNumber": null
      },
      {
        "link": 2,
        "holder": "current-owner",
        "titleNumber": "AZ-TTL-1"
      }
    ],
    "links": 2,
    "filingType": "paper",
    "titleStatus": "clear"
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "chain": [
      {
        "link": 1,
        "holder": "prior-owner",
        "titleNumber": null
      },
      {
        "link": 2,
        "holder": "current-owner",
        "titleNumber": "AZ-TTL-1"
      }
    ],
    "links": 2,
    "filingType": "paper",
    "titleStatus": "clear"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

correction

title.correction · POST /titles/correction · gate offer · sandbox · answers TitleCorrection@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.corrected@1 · Title.correctionFailed@1 · Title.correctionRequested@1.

the SDK — title.correction
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.correction({"vin":"4S4GUHM69T3775945"})
POST /titles/correction
curl -X POST https://apis.vin/titles/correction \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.262Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleCorrection@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "corrected": true,
    "field": "odometer",
    "titleNumber": "AZ-TTL-1",
    "filingType": "paper",
    "titleStatus": "clear"
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "corrected": true,
    "field": "odometer",
    "titleNumber": "AZ-TTL-1",
    "filingType": "paper",
    "titleStatus": "clear"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

courtOrderedTitle

title.courtOrderedTitle · POST /titles/court-ordered-title · gate key · sandbox · answers TitleCourtOrderedTitle@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.courtOrderedTitled@1.

the SDK — title.courtOrderedTitle
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.courtOrderedTitle()
POST /titles/court-ordered-title
curl -X POST https://apis.vin/titles/court-ordered-title \
  -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:10.068Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleCourtOrderedTitle@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "title",
    "asOf": "2026-08-10",
    "order": {
      "status": "court-order-filed",
      "id": "CRT-6dfd2b8f",
      "titleId": "TTL-6eade2d4",
      "opensAt": "Ordered"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "title",
    "asOf": "2026-08-10",
    "order": {
      "status": "court-order-filed",
      "id": "CRT-6dfd2b8f",
      "titleId": "TTL-6eade2d4",
      "opensAt": "Ordered"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

duplicate

title.duplicate · POST /titles/duplicate · gate offer · sandbox · answers TitleDuplicate@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.duplicateFailed@1 · Title.duplicateRequested@1 · Title.duplicated@1.

the SDK — title.duplicate
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.duplicate({"vin":"4S4GUHM69T3775945"})
POST /titles/duplicate
curl -X POST https://apis.vin/titles/duplicate \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.265Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleDuplicate@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "duplicate": true,
    "titleNumber": "AZ-TTL-1",
    "filingType": "paper",
    "forms": [
      {
        "code": "MV-1",
        "title": "Application for title & registration",
        "docRef": "form:AZ:MV-1:4S4GUHM69T3775945"
      },
      {
        "code": "POA",
        "title": "Power of attorney",
        "docRef": "form:AZ:POA:4S4GUHM69T3775945"
      }
    ],
    "status": "Complete"
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "state": "AZ",
    "duplicate": true,
    "titleNumber": "AZ-TTL-1",
    "filingType": "paper",
    "forms": [
      {
        "code": "MV-1",
        "title": "Application for title & registration",
        "docRef": "form:AZ:MV-1:4S4GUHM69T3775945"
      },
      {
        "code": "POA",
        "title": "Power of attorney",
        "docRef": "form:AZ:POA:4S4GUHM69T3775945"
      }
    ],
    "status": "Complete"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

expedite

title.expedite · POST /titles/expedite · gate offer · sandbox · answers TitleExpedite@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.expediteRequested@1 · Title.expedited@1.

the SDK — title.expedite
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.expedite({"vin":"4S4GUHM69T3775945"})
POST /titles/expedite
curl -X POST https://apis.vin/titles/expedite \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.265Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleExpedite@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "expedite": {
      "status": "expedited",
      "titleId": "TTL-2712918a",
      "position": "Ordered",
      "readyBy": "2026-08-13"
    }
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "expedite": {
      "status": "expedited",
      "titleId": "TTL-2712918a",
      "position": "Ordered",
      "readyBy": "2026-08-13"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

foreignTitleImport

title.foreignTitleImport · POST /titles/foreign-title-import · gate key · sandbox · answers TitleForeignTitleImport@1

No input — this capability takes no request body.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.foreignTitleImported@1.

the SDK — title.foreignTitleImport
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.foreignTitleImport()
POST /titles/foreign-title-import
curl -X POST https://apis.vin/titles/foreign-title-import \
  -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:10.068Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleForeignTitleImport@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "title",
    "asOf": "2026-08-10",
    "import": {
      "status": "import-filed",
      "id": "IMP-2ed35191",
      "titleId": "TTL-6eade2d4",
      "opensAt": "Ordered"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "title",
    "asOf": "2026-08-10",
    "import": {
      "status": "import-filed",
      "id": "IMP-2ed35191",
      "titleId": "TTL-6eade2d4",
      "opensAt": "Ordered"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

newState

title.newState · POST /titles/new-state · gate offer · sandbox · answers TitleNewState@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.newStateRequested@1 · Title.stateConverted@1.

the SDK — title.newState
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.newState({"vin":"4S4GUHM69T3775945"})
POST /titles/new-state
curl -X POST https://apis.vin/titles/new-state \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.272Z · HTTP 200
{
  "type": "OK",
  "answers": "TitleNewState@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "fromState": "CA",
    "toState": "AZ",
    "retitled": true,
    "titleNumber": "AZ-TTL-1",
    "filingType": "paper",
    "titleStatus": "clear"
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "fromState": "CA",
    "toState": "AZ",
    "retitled": true,
    "titleNumber": "AZ-TTL-1",
    "filingType": "paper",
    "titleStatus": "clear"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-registration-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

perfect

title.perfect · POST /titles/perfect · gate offer · sandbox · answers TitlePerfect@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.

Doortitle.vin serves this noun on its two routes: / (the landing) · /4S4GUHM69T3775945 (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.

EmitsTitle.lienPerfected@1 · Title.perfectFailed@1 · Title.perfectRequested@1 · Title.perfected@1.

the SDK — title.perfect
import { title } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await title.perfect({"vin":"4S4GUHM69T3775945"})
POST /titles/perfect
curl -X POST https://apis.vin/titles/perfect \
  -H 'content-type: application/json' \
  -d '{"vin":"4S4GUHM69T3775945"}'

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:18.291Z · HTTP 200
{
  "type": "OK",
  "answers": "TitlePerfect@1",
  "value": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "perfection": {
      "status": "already-perfected",
      "id": "LIEN-57c32616",
      "titlePosition": "Ordered"
    }
  },
  "evidence": {
    "vin": "4S4GUHM69T3775945",
    "noun": "title",
    "asOf": "2026-08-10",
    "perfection": {
      "status": "already-perfected",
      "id": "LIEN-57c32616",
      "titlePosition": "Ordered"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "title-cabinet-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.

Title

Schema

PropertyTypeNotes
titleIdid
vinstring
stateUsState
titleNumberstring
docTypeenumpaper|eTitle|MCO
brandsTitleBrand[]
ownerIdref→Party
statusTitleFSM
issuedAtdatetime

Relationships

FromToCardinalityAs
vehicletitle1:0..1titled
titlelien1:0..*encumbered

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.

Title · Class model

Title · State machine

Title · State machine

Title · State machine

Title · Sequence


Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.