docs.vin

lien

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

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

Identity

Nounlien
PillarServices (facets: 4 data · 9 services · 2 commerce)
Capabilities15 — 0 live · 15 sandbox · 0 declared
EntitiesLien
Doorsaggregator.vin
SDKVin.lien.* from apis.vin
Address/catalog/lien#{action} — the anchor IS the wire name minus lien.

Events

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

Discover & read

lookup

lien.lookup · GET /liens/lookup · gate none · sandbox · answers LienLookup@1

FieldTypeRequiredNotes
vinstringno

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

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

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:13.629Z · HTTP 200
{
  "type": "OK",
  "answers": "LienLookup@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "lien": {
      "id": "LIEN-5464eab4",
      "standing": "perfected",
      "lienholder": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "servicing": "Current"
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "lien": {
      "id": "LIEN-5464eab4",
      "standing": "perfected",
      "lienholder": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "servicing": "Current"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

status

lien.status · GET /liens/status · gate none · sandbox · answers LienStatus@1

FieldTypeRequiredNotes
vinstringno

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

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

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:13.637Z · HTTP 200
{
  "type": "OK",
  "answers": "LienStatus@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "lien": {
      "id": "LIEN-5464eab4",
      "standing": "perfected",
      "lienholder": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "servicing": "Current"
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "lien": {
      "id": "LIEN-5464eab4",
      "standing": "perfected",
      "lienholder": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "servicing": "Current"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

verify

lien.verify · GET /liens/verify · gate none · sandbox · answers LienVerify@1

FieldTypeRequiredNotes
vinstringno

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

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

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:13.640Z · HTTP 200
{
  "type": "OK",
  "answers": "LienVerify@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "lien": {
      "id": "LIEN-5464eab4",
      "standing": "perfected",
      "lienholder": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "servicing": "Current"
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "lien": {
      "id": "LIEN-5464eab4",
      "standing": "perfected",
      "lienholder": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "servicing": "Current"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

fee

lien.fee · POST /liens/fee · gate offer · sandbox · answers LienFee@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsLien.feeCharged@1 · Lien.feeRequested@1.

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

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

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:13.596Z · HTTP 200
{
  "type": "OK",
  "answers": "LienFee@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "fee": {
      "id": "LF-f228c7fe",
      "amountCents": 1500,
      "currency": "USD",
      "status": "quoted"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "fee": {
      "id": "LF-f228c7fe",
      "amountCents": 1500,
      "currency": "USD",
      "status": "quoted"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

subscribe

lien.subscribe · POST /liens/subscribe · gate key · sandbox · answers LienSubscribe@1

No input — this capability takes no request body.

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

EmitsLien.subscribed@1.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lien.subscribe()
POST /liens/subscribe
curl -X POST https://apis.vin/liens/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:09.905Z · HTTP 200
{
  "type": "OK",
  "answers": "LienSubscribe@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "lien",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-91c2bd29",
      "plan": "elt-monitor",
      "amountCents": 2900,
      "currency": "USD",
      "status": "active"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "lien",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-91c2bd29",
      "plan": "elt-monitor",
      "amountCents": 2900,
      "currency": "USD",
      "status": "active"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

assign

lien.assign · POST /liens/assign · gate offer · sandbox · answers LienAssign@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsLien.assignRequested@1 · Lien.assigned@1.

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

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

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:13.591Z · HTTP 200
{
  "type": "OK",
  "answers": "LienAssign@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "assignment": {
      "status": "assigned",
      "id": "LIEN-5464eab4",
      "from": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "to": {
        "fsId": "F000WL",
        "name": "Wells Fargo Auto"
      }
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "assignment": {
      "status": "assigned",
      "id": "LIEN-5464eab4",
      "from": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "to": {
        "fsId": "F000WL",
        "name": "Wells Fargo Auto"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

lien.pay · POST /liens/pay · gate offer · sandbox · answers LienPay@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsLien.paid@1 · Lien.payFailed@1 · Lien.payRequested@1.

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

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

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:13.630Z · HTTP 200
{
  "type": "OK",
  "answers": "LienPay@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "payment": {
      "id": "PAY-afde5710",
      "amountCents": 1500,
      "currency": "USD",
      "status": "settled"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "payment": {
      "id": "PAY-afde5710",
      "amountCents": 1500,
      "currency": "USD",
      "status": "settled"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Authorize & resolve

priorityDispute

lien.priorityDispute · POST /liens/priority-dispute · gate key · sandbox · answers LienPriorityDispute@1

No input — this capability takes no request body.

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

EmitsLien.priorityDisputed@1.

the SDK — lien.priorityDispute
import { lien } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lien.priorityDispute()
POST /liens/priority-dispute
curl -X POST https://apis.vin/liens/priority-dispute \
  -H 'content-type: application/json' \
  -d '{}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-16T14:50:09.904Z · HTTP 200
{
  "type": "OK",
  "answers": "LienPriorityDispute@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "lien",
    "asOf": "2026-08-10",
    "dispute": {
      "status": "no-lien-on-file"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "lien",
    "asOf": "2026-08-10",
    "dispute": {
      "status": "no-lien-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

satisfactionDispute

lien.satisfactionDispute · POST /liens/satisfaction-dispute · gate key · sandbox · answers LienSatisfactionDispute@1

No input — this capability takes no request body.

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

EmitsLien.satisfactionDisputed@1.

the SDK — lien.satisfactionDispute
import { lien } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lien.satisfactionDispute()
POST /liens/satisfaction-dispute
curl -X POST https://apis.vin/liens/satisfaction-dispute \
  -H 'content-type: application/json' \
  -d '{}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-16T14:50:09.905Z · HTTP 200
{
  "type": "OK",
  "answers": "LienSatisfactionDispute@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "lien",
    "asOf": "2026-08-10",
    "dispute": {
      "status": "no-lien-on-file"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "lien",
    "asOf": "2026-08-10",
    "dispute": {
      "status": "no-lien-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

release

lien.release · POST /liens/release · gate offer · sandbox · answers LienRelease@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsLien.releaseFailed@1 · Lien.releaseRequested@1 · Lien.released@1.

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

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

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:13.637Z · HTTP 200
{
  "type": "OK",
  "answers": "LienRelease@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "release": {
      "status": "note-outstanding",
      "id": "LIEN-5464eab4",
      "servicing": "Current"
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "release": {
      "status": "note-outstanding",
      "id": "LIEN-5464eab4",
      "servicing": "Current"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

eltRelease

lien.eltRelease · POST /liens/elt-release · gate offer · sandbox · answers LienEltRelease@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsLien.eltReleaseFailed@1 · Lien.eltReleaseRequested@1 · Lien.eltReleased@1.

the SDK — lien.eltRelease
import { lien } from 'apis.vin'

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

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:13.595Z · HTTP 200
{
  "type": "OK",
  "answers": "LienEltRelease@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "release": {
      "status": "note-outstanding",
      "id": "LIEN-5464eab4"
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "release": {
      "status": "note-outstanding",
      "id": "LIEN-5464eab4"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

elt

lien.elt · POST /liens/elt · gate offer · sandbox · answers LienElt@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsLien.eltAdded@1 · Lien.eltRequested@1 · Lien.elted@1.

the SDK — lien.elt
import { lien } from 'apis.vin'

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

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:13.592Z · HTTP 200
{
  "type": "OK",
  "answers": "LienElt@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "elt": {
      "id": "LIEN-5464eab4",
      "standing": "perfected",
      "lienholder": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "medium": "electronic"
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "elt": {
      "id": "LIEN-5464eab4",
      "standing": "perfected",
      "lienholder": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "medium": "electronic"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

fraudulentClaimContest

lien.fraudulentClaimContest · POST /liens/fraudulent-claim-contest · gate key · sandbox · answers LienFraudulentClaimContest@1

No input — this capability takes no request body.

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

EmitsLien.fraudulentClaimContested@1.

the SDK — lien.fraudulentClaimContest
import { lien } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lien.fraudulentClaimContest()
POST /liens/fraudulent-claim-contest
curl -X POST https://apis.vin/liens/fraudulent-claim-contest \
  -H 'content-type: application/json' \
  -d '{}'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-16T14:50:09.904Z · HTTP 200
{
  "type": "OK",
  "answers": "LienFraudulentClaimContest@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "lien",
    "asOf": "2026-08-10",
    "contest": {
      "status": "no-lien-on-file"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "lien",
    "asOf": "2026-08-10",
    "contest": {
      "status": "no-lien-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

perfect

lien.perfect · POST /liens/perfect · gate offer · sandbox · answers LienPerfect@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsLien.perfectFailed@1 · Lien.perfectRequested@1 · Lien.perfected@1.

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

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

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:13.631Z · HTTP 200
{
  "type": "OK",
  "answers": "LienPerfect@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "perfection": {
      "status": "already-perfected",
      "id": "LIEN-5464eab4"
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "perfection": {
      "status": "already-perfected",
      "id": "LIEN-5464eab4"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

record

lien.record · POST /liens/record · gate offer · sandbox · answers LienRecord@1

FieldTypeRequiredNotes
vinstringno

The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.

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

EmitsLien.recordFailed@1 · Lien.recordRequested@1 · Lien.recorded@1.

the SDK — lien.record
import { lien } from 'apis.vin'

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

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:13.636Z · HTTP 200
{
  "type": "OK",
  "answers": "LienRecord@1",
  "value": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "recording": {
      "status": "already-recorded",
      "id": "LIEN-5464eab4",
      "lienholder": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      }
    }
  },
  "evidence": {
    "vin": "2C4RC1BG2HR703812",
    "noun": "lien",
    "asOf": "2026-08-10",
    "recording": {
      "status": "already-recorded",
      "id": "LIEN-5464eab4",
      "lienholder": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "risk-money-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.

Lien

Schema

PropertyType
lienIdid
lienholderIdref→Lender
positionint
perfectedAtdatetime
releasedAtdatetime

Relationships

FromToCardinalityAs
titlelien1:0..*encumbered

Modeled

The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 3 diagrams, rendered from the estate model.

Lien · Class model

Lien · State machine

Lien · Sequence


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