docs.vin

refinance

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

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

Identity

Nounrefinance
PillarData (facets: 4 data · 2 services · 2 commerce)
Capabilities8 — 0 live · 8 sandbox · 0 declared
EntitiesLoan
Doorsaggregator.vin
SDKVin.refinance.* from apis.vin
Address/catalog/refinance#{action} — the anchor IS the wire name minus refinance.

Events

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

Discover & read

eligibility

refinance.eligibility · GET /refinances/eligibility · gate key · sandbox · answers RefinanceEligibility@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await refinance.eligibility({"vin":"JM3KFBDM2N0529402"})
GET /refinances/eligibility
curl 'https://apis.vin/refinances/eligibility?vin=JM3KFBDM2N0529402'

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:16.541Z · HTTP 200
{
  "type": "OK",
  "answers": "RefinanceEligibility@1",
  "value": {
    "vin": "JM3KFBDM2N0529402",
    "asOf": "2026-08-10",
    "eligible": true,
    "standing": "eligible",
    "loanStatus": "Current",
    "lienholder": {
      "fsId": "F3TC22",
      "name": "Huntington National Bank"
    },
    "collateral": {
      "titleBranded": false,
      "disposition": "retail"
    }
  },
  "evidence": {
    "vin": "JM3KFBDM2N0529402",
    "asOf": "2026-08-10",
    "eligible": true,
    "standing": "eligible",
    "loanStatus": "Current",
    "lienholder": {
      "fsId": "F3TC22",
      "name": "Huntington National Bank"
    },
    "collateral": {
      "titleBranded": false,
      "disposition": "retail"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "refi-journey-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

payoffQuote

refinance.payoffQuote · GET /refinances/payoff-quote · gate key · sandbox · answers RefinancePayoffQuote@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await refinance.payoffQuote({"vin":"JM3KFBDM2N0529402"})
GET /refinances/payoff-quote
curl 'https://apis.vin/refinances/payoff-quote?vin=JM3KFBDM2N0529402'

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:16.541Z · HTTP 200
{
  "type": "OK",
  "answers": "RefinancePayoffQuote@1",
  "value": {
    "vin": "JM3KFBDM2N0529402",
    "lienholder": "Huntington National Bank",
    "grossPayOffAmount": {
      "currency": "USD",
      "minorUnits": 2469239
    },
    "netPayOffAmount": {
      "currency": "USD",
      "minorUnits": 2435725
    },
    "perDiem": {
      "currency": "USD",
      "minorUnits": 331
    },
    "allowance": {
      "currency": "USD",
      "minorUnits": 33514
    },
    "goodThrough": "2026-08-20T00:00:00.000Z",
    "nextPaymentAmount": {
      "currency": "USD",
      "minorUnits": 41236
    },
    "nextPaymentDate": "2026-08-25T00:00:00.000Z",
    "freshQuote": true,
    "reference": "poq_1adbcbeb"
  },
  "evidence": {
    "vin": "JM3KFBDM2N0529402",
    "lienholder": "Huntington National Bank",
    "grossPayOffAmount": {
      "currency": "USD",
      "minorUnits": 2469239
    },
    "netPayOffAmount": {
      "currency": "USD",
      "minorUnits": 2435725
    },
    "perDiem": {
      "currency": "USD",
      "minorUnits": 331
    },
    "allowance": {
      "currency": "USD",
      "minorUnits": 33514
    },
    "goodThrough": "2026-08-20T00:00:00.000Z",
    "nextPaymentAmount": {
      "currency": "USD",
      "minorUnits": 41236
    },
    "nextPaymentDate": "2026-08-25T00:00:00.000Z",
    "freshQuote": true,
    "reference": "poq_1adbcbeb"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "refi-journey-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

rateOffer

refinance.rateOffer · GET /refinances/rate-offer · gate key · sandbox · answers RefinanceRateOffer@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await refinance.rateOffer({"vin":"JM3KFBDM2N0529402"})
GET /refinances/rate-offer
curl 'https://apis.vin/refinances/rate-offer?vin=JM3KFBDM2N0529402'

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:16.541Z · HTTP 200
{
  "type": "OK",
  "answers": "RefinanceRateOffer@1",
  "value": {
    "vin": "JM3KFBDM2N0529402",
    "applicant": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    },
    "offered": true,
    "offerId": "off_4028ecf3",
    "apr": "4.49",
    "termMonths": 72,
    "rateBand": "best",
    "decision": "approved",
    "stipulations": []
  },
  "evidence": {
    "vin": "JM3KFBDM2N0529402",
    "applicant": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    },
    "offered": true,
    "offerId": "off_4028ecf3",
    "apr": "4.49",
    "termMonths": 72,
    "rateBand": "best",
    "decision": "approved",
    "stipulations": []
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "refi-journey-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

originate

refinance.originate · POST /refinances/originate · gate offer · sandbox · answers RefinanceOriginate@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) · /JM3KFBDM2N0529402 (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.

EmitsRefinance.originated@1.

the SDK — refinance.originate
import { refinance } from 'apis.vin'

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

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:16.541Z · HTTP 200
{
  "type": "OK",
  "answers": "RefinanceOriginate@1",
  "value": {
    "vin": "JM3KFBDM2N0529402",
    "refiId": "refi_fcf9889d",
    "applicant": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    },
    "lienholder": "Huntington National Bank",
    "payoffReference": "poq_1adbcbeb",
    "principal": {
      "currency": "USD",
      "minorUnits": 2435725
    },
    "offerId": "off_4028ecf3",
    "apr": "4.49",
    "termMonths": 72,
    "rateBand": "best",
    "decision": "approved",
    "stipulations": [],
    "monthlyPayment": {
      "currency": "USD",
      "minorUnits": 38654
    },
    "status": "Originated"
  },
  "evidence": {
    "vin": "JM3KFBDM2N0529402",
    "refiId": "refi_fcf9889d",
    "applicant": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    },
    "lienholder": "Huntington National Bank",
    "payoffReference": "poq_1adbcbeb",
    "principal": {
      "currency": "USD",
      "minorUnits": 2435725
    },
    "offerId": "off_4028ecf3",
    "apr": "4.49",
    "termMonths": 72,
    "rateBand": "best",
    "decision": "approved",
    "stipulations": [],
    "monthlyPayment": {
      "currency": "USD",
      "minorUnits": 38654
    },
    "status": "Originated"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "refi-journey-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

payoffRemit

refinance.payoffRemit · POST /refinances/payoff-remit · gate offer · sandbox · answers RefinancePayoffRemit@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) · /JM3KFBDM2N0529402 (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.

EmitsRefinance.failed@1 · Refinance.payoffRemitted@1.

the SDK — refinance.payoffRemit
import { refinance } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await refinance.payoffRemit({"vin":"JM3KFBDM2N0529402"})
POST /refinances/payoff-remit
curl -X POST https://apis.vin/refinances/payoff-remit \
  -H 'content-type: application/json' \
  -d '{"vin":"JM3KFBDM2N0529402"}'

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:16.541Z · HTTP 200
{
  "type": "OK",
  "answers": "RefinancePayoffRemit@1",
  "value": {
    "vin": "JM3KFBDM2N0529402",
    "remitId": "rmt_147ea7f2",
    "lienholder": "Huntington National Bank",
    "payoffReference": "poq_1adbcbeb",
    "amount": {
      "currency": "USD",
      "minorUnits": 2435725
    },
    "method": "ach",
    "goodThrough": "2026-08-20T00:00:00.000Z",
    "status": "Remitted"
  },
  "evidence": {
    "vin": "JM3KFBDM2N0529402",
    "remitId": "rmt_147ea7f2",
    "lienholder": "Huntington National Bank",
    "payoffReference": "poq_1adbcbeb",
    "amount": {
      "currency": "USD",
      "minorUnits": 2435725
    },
    "method": "ach",
    "goodThrough": "2026-08-20T00:00:00.000Z",
    "status": "Remitted"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "refi-journey-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

cashOut

refinance.cashOut · POST /refinances/cash-out · gate offer · sandbox · answers RefinanceCashOut@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) · /JM3KFBDM2N0529402 (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.

EmitsRefinance.cashedOut@1 · Refinance.failed@1.

the SDK — refinance.cashOut
import { refinance } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await refinance.cashOut({"vin":"JM3KFBDM2N0529402"})
POST /refinances/cash-out
curl -X POST https://apis.vin/refinances/cash-out \
  -H 'content-type: application/json' \
  -d '{"vin":"JM3KFBDM2N0529402"}'

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:16.541Z · HTTP 200
{
  "type": "OK",
  "answers": "RefinanceCashOut@1",
  "value": {
    "vin": "JM3KFBDM2N0529402",
    "noun": "refinance",
    "asOf": "2026-08-10",
    "id": "LN-8deb655f",
    "principal": 736000,
    "apr": "4.49",
    "term": 72,
    "cashOut": {
      "vin": "JM3KFBDM2N0529402",
      "status": "refused",
      "reason": "negative-equity",
      "equityCents": -1973225,
      "netPayoffCents": 2435725,
      "allowanceCents": 462500,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "JM3KFBDM2N0529402",
    "noun": "refinance",
    "asOf": "2026-08-10",
    "id": "LN-8deb655f",
    "principal": 736000,
    "apr": "4.49",
    "term": 72,
    "cashOut": {
      "vin": "JM3KFBDM2N0529402",
      "status": "refused",
      "reason": "negative-equity",
      "equityCents": -1973225,
      "netPayoffCents": 2435725,
      "allowanceCents": 462500,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "equity-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

lienSwap

refinance.lienSwap · POST /refinances/lien-swap · gate offer · sandbox · answers RefinanceLienSwap@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) · /JM3KFBDM2N0529402 (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.

EmitsRefinance.lienSwapped@1.

the SDK — refinance.lienSwap
import { refinance } from 'apis.vin'

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

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:16.541Z · HTTP 200
{
  "type": "OK",
  "answers": "RefinanceLienSwap@1",
  "value": {
    "vin": "JM3KFBDM2N0529402",
    "noun": "refinance",
    "asOf": "2026-08-10",
    "id": "LN-8deb655f",
    "principal": 736000,
    "apr": "4.49",
    "term": 72,
    "swap": {
      "status": "lien-swapped",
      "id": "LSW-7047bdcb",
      "lien": {
        "id": "LIEN-846d0ff1",
        "standing": "perfected"
      },
      "from": "Huntington National Bank",
      "to": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "amount": {
        "currency": "USD",
        "minorUnits": 2435725
      },
      "payoffReference": "poq_1adbcbeb",
      "goodThrough": "2026-08-20T00:00:00.000Z"
    }
  },
  "evidence": {
    "vin": "JM3KFBDM2N0529402",
    "noun": "refinance",
    "asOf": "2026-08-10",
    "id": "LN-8deb655f",
    "principal": 736000,
    "apr": "4.49",
    "term": 72,
    "swap": {
      "status": "lien-swapped",
      "id": "LSW-7047bdcb",
      "lien": {
        "id": "LIEN-846d0ff1",
        "standing": "perfected"
      },
      "from": "Huntington National Bank",
      "to": {
        "fsId": "F00SET",
        "name": "Southeast Toyota Finance"
      },
      "amount": {
        "currency": "USD",
        "minorUnits": 2435725
      },
      "payoffReference": "poq_1adbcbeb",
      "goodThrough": "2026-08-20T00:00:00.000Z"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "equity-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

savings

refinance.savings · GET /refinances/savings · gate key · sandbox · answers RefinanceSavings@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await refinance.savings({"vin":"JM3KFBDM2N0529402"})
GET /refinances/savings
curl 'https://apis.vin/refinances/savings?vin=JM3KFBDM2N0529402'

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:16.541Z · HTTP 200
{
  "type": "OK",
  "answers": "RefinanceSavings@1",
  "value": {
    "vin": "JM3KFBDM2N0529402",
    "applicant": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    },
    "principal": {
      "currency": "USD",
      "minorUnits": 2435725
    },
    "termMonths": 72,
    "currentApr": "4.90",
    "offeredApr": "4.49",
    "currentMonthly": {
      "currency": "USD",
      "minorUnits": 39114
    },
    "offeredMonthly": {
      "currency": "USD",
      "minorUnits": 38654
    },
    "monthlySavings": {
      "currency": "USD",
      "minorUnits": 460
    },
    "totalOverTerm": {
      "currency": "USD",
      "minorUnits": 33120
    },
    "worthIt": true
  },
  "evidence": {
    "vin": "JM3KFBDM2N0529402",
    "applicant": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    },
    "principal": {
      "currency": "USD",
      "minorUnits": 2435725
    },
    "termMonths": 72,
    "currentApr": "4.90",
    "offeredApr": "4.49",
    "currentMonthly": {
      "currency": "USD",
      "minorUnits": 39114
    },
    "offeredMonthly": {
      "currency": "USD",
      "minorUnits": 38654
    },
    "monthlySavings": {
      "currency": "USD",
      "minorUnits": 460
    },
    "totalOverTerm": {
      "currency": "USD",
      "minorUnits": 33120
    },
    "worthIt": true
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "refi-journey-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.

Loan

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.

Refinance · Class model

Refinance · State machine

The refinance workflow

refinance · GET /workflows/refinance · gate key · sandbox · answers Deal@1

The workflow shares this address because its name IS this noun's slug — one namespace, one page (the wire name is the DOI). It is a composition of standalone acts over the grid: delete the workflow and every leaf still transacts on its own address.

FieldTypeRequiredNotes
workflowstringyesconst refinance
vinstringyes
dealTypestringnoconst REFINANCE
borrowerobjectnoparty ref pty_…
authoritystringnomnd_… — required when delegated

Modeled end to end — the stategraph it advances, the actors and messages it sequences, its decision logic, and its flow of funds:

Stategraph (stateDiagram-v2)

Actor interactions (sequenceDiagram)

Flow of funds (sankey)

EmitsDeal.opened@1 · Deal.advanced@1 · Deal.settled@1.

the SDK — refinance(vin)
import { refinance } from 'apis.vin'

// refinance is a workflow — a composition of standalone acts.
// Run it end-to-end, or call each leaf act directly.
const run = await refinance('JM3KFBDM2N0529402')
GET /workflows/refinance
curl 'https://apis.vin/workflows/refinance?workflow=refinance&vin=JM3KFBDM2N0529402'

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:19.361Z · HTTP 200
{
  "type": "OK",
  "answers": "Deal@1",
  "value": {
    "dealId": "deal_41543f61",
    "workflow": "workflow-f03ad867",
    "dealType": "Deal-01",
    "vehicleId": "vehicle_5a4038a7",
    "buyerId": "party_7ac50c64",
    "sellerId": "party_5079bf1c",
    "dealerOfRecordId": "dealer_fd1b5dd6",
    "authority": "mandate_6b4cc4d7",
    "structure": "Deal-01",
    "state": "Deal-01",
    "correlationId": "W0-EVT-01",
    "dependsOn": []
  },
  "evidence": {
    "dealId": "deal_41543f61",
    "workflow": "workflow-f03ad867",
    "dealType": "Deal-01",
    "vehicleId": "vehicle_5a4038a7",
    "buyerId": "party_7ac50c64",
    "sellerId": "party_5079bf1c",
    "dealerOfRecordId": "dealer_fd1b5dd6",
    "authority": "mandate_6b4cc4d7",
    "structure": "Deal-01",
    "state": "Deal-01",
    "correlationId": "W0-EVT-01",
    "dependsOn": []
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "deal-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": true
  }
}

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