docs.vin

dealJacket

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

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

Identity

NoundealJacket
PillarData (facets: 5 data · 4 services · 2 commerce)
Capabilities11 — 0 live · 11 sandbox · 0 declared
EntitiesDealJacket
Doorsaggregator.vin
SDKVin.dealJacket.* from apis.vin
Address/catalog/dealJacket#{action} — the anchor IS the wire name minus dealJacket.

Events

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

Discover & read

read

dealJacket.read · GET /deal-jackets/read · gate none · sandbox · answers DealJacketRead@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.read({"vin":"1G1FF1R75M0137917"})
GET /deal-jackets/read
curl 'https://apis.vin/deal-jackets/read?vin=1G1FF1R75M0137917'

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:10.138Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketRead@1",
  "value": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "position": "QUOTED"
  },
  "evidence": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "position": "QUOTED"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-file-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

status

dealJacket.status · GET /deal-jackets/status · gate none · sandbox · answers DealJacketStatus@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.status({"vin":"1G1FF1R75M0137917"})
GET /deal-jackets/status
curl 'https://apis.vin/deal-jackets/status?vin=1G1FF1R75M0137917'

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:10.139Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketStatus@1",
  "value": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "position": "QUOTED",
    "openItems": [
      "credit-approved",
      "documents-signed",
      "contract-signed",
      "funds-settled"
    ]
  },
  "evidence": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "position": "QUOTED",
    "openItems": [
      "credit-approved",
      "documents-signed",
      "contract-signed",
      "funds-settled"
    ]
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-file-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

audit

dealJacket.audit · GET /deal-jackets/audit · gate none · sandbox · answers DealJacketAudit@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.audit({"vin":"1G1FF1R75M0137917"})
GET /deal-jackets/audit
curl 'https://apis.vin/deal-jackets/audit?vin=1G1FF1R75M0137917'

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:10.129Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketAudit@1",
  "value": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "auditLog": {
      "entries": [
        {
          "event": "jacket-opened",
          "jacketId": "DJK-9d1c64a4",
          "dealId": "DL-f789bfe2"
        }
      ],
      "count": 1
    }
  },
  "evidence": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "auditLog": {
      "entries": [
        {
          "event": "jacket-opened",
          "jacketId": "DJK-9d1c64a4",
          "dealId": "DL-f789bfe2"
        }
      ],
      "count": 1
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-file-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

checklist

dealJacket.checklist · GET /deal-jackets/checklist · gate none · sandbox · answers DealJacketChecklist@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.checklist({"vin":"1G1FF1R75M0137917"})
GET /deal-jackets/checklist
curl 'https://apis.vin/deal-jackets/checklist?vin=1G1FF1R75M0137917'

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:10.131Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketChecklist@1",
  "value": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "checklist": {
      "items": [
        {
          "item": "credit-approved",
          "done": false,
          "position": "Prequal"
        },
        {
          "item": "documents-signed",
          "done": false,
          "position": "Draft"
        },
        {
          "item": "contract-signed",
          "done": false,
          "position": "Generated"
        },
        {
          "item": "funds-settled",
          "done": false,
          "position": "QUOTED"
        }
      ],
      "openItems": [
        "credit-approved",
        "documents-signed",
        "contract-signed",
        "funds-settled"
      ]
    }
  },
  "evidence": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "checklist": {
      "items": [
        {
          "item": "credit-approved",
          "done": false,
          "position": "Prequal"
        },
        {
          "item": "documents-signed",
          "done": false,
          "position": "Draft"
        },
        {
          "item": "contract-signed",
          "done": false,
          "position": "Generated"
        },
        {
          "item": "funds-settled",
          "done": false,
          "position": "QUOTED"
        }
      ],
      "openItems": [
        "credit-approved",
        "documents-signed",
        "contract-signed",
        "funds-settled"
      ]
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-file-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

submit

dealJacket.submit · POST /deal-jackets/submit · gate offer · sandbox · answers DealJacketSubmit@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) · /1G1FF1R75M0137917 (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.

EmitsDealJacket.submitFailed@1 · DealJacket.submitRequested@1 · DealJacket.submitted@1.

the SDK — dealJacket.submit
import { dealJacket } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.submit({"vin":"1G1FF1R75M0137917"})
POST /deal-jackets/submit
curl -X POST https://apis.vin/deal-jackets/submit \
  -H 'content-type: application/json' \
  -d '{"vin":"1G1FF1R75M0137917"}'

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:10.155Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketSubmit@1",
  "value": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "submission": {
      "status": "not-yet-submitted",
      "creditPosition": "Prequal"
    }
  },
  "evidence": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "submission": {
      "status": "not-yet-submitted",
      "creditPosition": "Prequal"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-file-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

fund

dealJacket.fund · POST /deal-jackets/fund · gate offer · sandbox · answers DealJacketFund@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) · /1G1FF1R75M0137917 (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.

EmitsDealJacket.fundFailed@1 · DealJacket.fundRequested@1 · DealJacket.funded@1.

the SDK — dealJacket.fund
import { dealJacket } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.fund({"vin":"1G1FF1R75M0137917"})
POST /deal-jackets/fund
curl -X POST https://apis.vin/deal-jackets/fund \
  -H 'content-type: application/json' \
  -d '{"vin":"1G1FF1R75M0137917"}'

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:10.134Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketFund@1",
  "value": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "funding": {
      "status": "not-yet-funded",
      "position": "QUOTED"
    }
  },
  "evidence": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "funding": {
      "status": "not-yet-funded",
      "position": "QUOTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-file-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

complete

dealJacket.complete · POST /deal-jackets/complete · gate offer · sandbox · answers DealJacketComplete@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) · /1G1FF1R75M0137917 (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.

EmitsDealJacket.completeRequested@1 · DealJacket.completed@1.

the SDK — dealJacket.complete
import { dealJacket } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.complete({"vin":"1G1FF1R75M0137917"})
POST /deal-jackets/complete
curl -X POST https://apis.vin/deal-jackets/complete \
  -H 'content-type: application/json' \
  -d '{"vin":"1G1FF1R75M0137917"}'

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:10.132Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketComplete@1",
  "value": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "completion": {
      "status": "incomplete",
      "openItems": [
        "credit-approved",
        "documents-signed",
        "contract-signed",
        "funds-settled"
      ]
    }
  },
  "evidence": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "completion": {
      "status": "incomplete",
      "openItems": [
        "credit-approved",
        "documents-signed",
        "contract-signed",
        "funds-settled"
      ]
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-file-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

assemble

dealJacket.assemble · POST /deal-jackets/assemble · gate offer · sandbox · answers DealJacketAssemble@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) · /1G1FF1R75M0137917 (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.

EmitsDealJacket.assembleRequested@1 · DealJacket.assembled@1.

the SDK — dealJacket.assemble
import { dealJacket } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.assemble({"vin":"1G1FF1R75M0137917"})
POST /deal-jackets/assemble
curl -X POST https://apis.vin/deal-jackets/assemble \
  -H 'content-type: application/json' \
  -d '{"vin":"1G1FF1R75M0137917"}'

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:10.128Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketAssemble@1",
  "value": {
    "dealJacket": {
      "dealJacketId": "DJ-1",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "credit-rail-sandbox"
      }
    }
  },
  "evidence": {
    "dealJacket": {
      "dealJacketId": "DJ-1",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "credit-rail-sandbox"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "credit-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

archive

dealJacket.archive · POST /deal-jackets/archive · gate offer · sandbox · answers DealJacketArchive@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) · /1G1FF1R75M0137917 (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.

EmitsDealJacket.archiveRequested@1 · DealJacket.archived@1.

the SDK — dealJacket.archive
import { dealJacket } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.archive({"vin":"1G1FF1R75M0137917"})
POST /deal-jackets/archive
curl -X POST https://apis.vin/deal-jackets/archive \
  -H 'content-type: application/json' \
  -d '{"vin":"1G1FF1R75M0137917"}'

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:10.128Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketArchive@1",
  "value": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "archive": {
      "status": "still-active",
      "position": "QUOTED"
    }
  },
  "evidence": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "archive": {
      "status": "still-active",
      "position": "QUOTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-file-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

completeness

dealJacket.completeness · GET /deal-jackets/completeness · gate none · sandbox · answers DealJacketCompleteness@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.completeness({"vin":"1G1FF1R75M0137917"})
GET /deal-jackets/completeness
curl 'https://apis.vin/deal-jackets/completeness?vin=1G1FF1R75M0137917'

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:10.132Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketCompleteness@1",
  "value": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "completeness": {
      "done": 0,
      "total": 4,
      "openItems": [
        "credit-approved",
        "documents-signed",
        "contract-signed",
        "funds-settled"
      ]
    }
  },
  "evidence": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "completeness": {
      "done": 0,
      "total": 4,
      "openItems": [
        "credit-approved",
        "documents-signed",
        "contract-signed",
        "funds-settled"
      ]
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-file-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

stipulate

dealJacket.stipulate · POST /deal-jackets/stipulate · gate offer · sandbox · answers DealJacketStipulate@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) · /1G1FF1R75M0137917 (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.

EmitsDealJacket.stipulateRequested@1 · DealJacket.stipulated@1.

the SDK — dealJacket.stipulate
import { dealJacket } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await dealJacket.stipulate({"vin":"1G1FF1R75M0137917"})
POST /deal-jackets/stipulate
curl -X POST https://apis.vin/deal-jackets/stipulate \
  -H 'content-type: application/json' \
  -d '{"vin":"1G1FF1R75M0137917"}'

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:10.154Z · HTTP 200
{
  "type": "OK",
  "answers": "DealJacketStipulate@1",
  "value": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "stipulation": {
      "status": "no-stip-on-file"
    }
  },
  "evidence": {
    "vin": "1G1FF1R75M0137917",
    "noun": "dealJacket",
    "asOf": "2026-08-10",
    "id": "DJK-9d1c64a4",
    "dealId": "DL-f789bfe2",
    "documents": [
      "DOC-11520f1b"
    ],
    "complete": false,
    "stipulation": {
      "status": "no-stip-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-file-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.

DealJacket

Schema

PropertyType
idid
dealIdref→Deal
documentsref→Document[]
completebool

Relationships

FromToCardinalityAs
dealdealJacket1:1jacket
dealJacketdocument1:0..*holds

Modeled

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

DealJacket · Class model

DealJacket · State machine


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