docs.vin

escrow

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

escrow 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 escrow.vin · aggregator.vin.

Identity

Nounescrow
PillarCommerce (facets: 3 data · 5 services · 7 commerce)
Capabilities15 — 0 live · 15 sandbox · 0 declared
EntitiesEscrow
Doorsaggregator.vin · escrow.vin
SDKVin.escrow.* from apis.vin
Address/catalog/escrow#{action} — the anchor IS the wire name minus escrow.

Lifecycle

EscrowEscrowFSM: 6 states, 6 transitions — Funded · InspectionHeld · FundsVerified · Disputed · Refunded · Released. Each transition is a past-tense event on the record.

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

status

escrow.status · GET /escrows/status · gate none · sandbox · answers EscrowStatus@1

FieldTypeRequiredNotes
vinstringno

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

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

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:11.066Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowStatus@1",
  "value": {
    "escrow": {
      "$type": "EscrowHandle",
      "$id": "escrow_es_1",
      "contractRef": "outcomecontract_2C4RDGBGXHR789631",
      "buyerRef": "payer-sandbox",
      "sellerRef": "payee-sandbox",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "state": "held",
      "escrowAccountRef": "acct_escrow_es_1",
      "fundedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "es_1"
      },
      "deadline": "2026-12-01T00:00:00.000Z"
    }
  },
  "evidence": {
    "escrow": {
      "$type": "EscrowHandle",
      "$id": "escrow_es_1",
      "contractRef": "outcomecontract_2C4RDGBGXHR789631",
      "buyerRef": "payer-sandbox",
      "sellerRef": "payee-sandbox",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "state": "held",
      "escrowAccountRef": "acct_escrow_es_1",
      "fundedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "es_1"
      },
      "deadline": "2026-12-01T00:00:00.000Z"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

verify

escrow.verify · POST /escrows/verify · gate offer · sandbox · answers EscrowVerify@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.

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

EmitsEscrow.fundsVerified@1.

the SDK — escrow.verify
import { escrow } from 'apis.vin'

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

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:11.069Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowVerify@1",
  "value": {
    "reference": "2C4RDGBGXHR789631",
    "verified": true,
    "heldBalance": {
      "amount": "5000.00",
      "currency": "USD"
    },
    "state": "held"
  },
  "evidence": {
    "reference": "2C4RDGBGXHR789631",
    "verified": true,
    "heldBalance": {
      "amount": "5000.00",
      "currency": "USD"
    },
    "state": "held"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

open

escrow.open · POST /escrows/open · gate offer · sandbox · answers EscrowOpen@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.

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

EmitsEscrow.opened@1.

the SDK — escrow.open
import { escrow } from 'apis.vin'

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

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:11.048Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowOpen@1",
  "value": {
    "escrow": {
      "$type": "EscrowHandle",
      "$id": "escrow_es_1",
      "contractRef": "outcomecontract_2C4RDGBGXHR789631",
      "buyerRef": "payer-sandbox",
      "sellerRef": "payee-sandbox",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "state": "held",
      "escrowAccountRef": "acct_escrow_es_1",
      "fundedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "es_1"
      },
      "deadline": "2026-12-01T00:00:00.000Z"
    }
  },
  "evidence": {
    "escrow": {
      "$type": "EscrowHandle",
      "$id": "escrow_es_1",
      "contractRef": "outcomecontract_2C4RDGBGXHR789631",
      "buyerRef": "payer-sandbox",
      "sellerRef": "payee-sandbox",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "state": "held",
      "escrowAccountRef": "acct_escrow_es_1",
      "fundedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "es_1"
      },
      "deadline": "2026-12-01T00:00:00.000Z"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

fund

escrow.fund · POST /escrows/fund · gate offer · sandbox · answers Escrow@1

FieldTypeRequiredNotes
amountstringyesdecimal
conditionsarray<string>yesrelease conditions gated on the stips FSM
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: not posted — see /pricing.

Delegated calls require a typed Mandate{ ceiling, perAction, expires, tripwires }; the ceiling is a field, not a conversation.

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

EmitsEscrow.disbursed@1 · Escrow.expired@1 · Escrow.failed@1 · Escrow.funded@1 · Escrow.opened@1 · Escrow.refunded@1 · Escrow.released@1.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await escrow.fund({"amount":"amount","conditions":[]})
POST /escrows/fund
curl -X POST https://apis.vin/escrows/fund \
  -H 'content-type: application/json' \
  -d '{"amount":"amount","conditions":[]}'

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.797Z · HTTP 200
{
  "type": "OK",
  "answers": "Escrow@1",
  "value": {
    "escrow": {
      "$type": "EscrowHandle",
      "$id": "escrow_es_1",
      "contractRef": "outcomecontract_1HGCM82633A004352",
      "buyerRef": "payer-sandbox",
      "sellerRef": "payee-sandbox",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "state": "held",
      "escrowAccountRef": "acct_escrow_es_1",
      "fundedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "es_1"
      },
      "deadline": "2026-12-01T00:00:00.000Z"
    }
  },
  "evidence": {
    "escrow": {
      "$type": "EscrowHandle",
      "$id": "escrow_es_1",
      "contractRef": "outcomecontract_1HGCM82633A004352",
      "buyerRef": "payer-sandbox",
      "sellerRef": "payee-sandbox",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "state": "held",
      "escrowAccountRef": "acct_escrow_es_1",
      "fundedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "es_1"
      },
      "deadline": "2026-12-01T00:00:00.000Z"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

disburse

escrow.disburse · POST /escrows/disburse · gate offer · sandbox · answers EscrowDisburse@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.

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

EmitsEscrow.disbursed@1 · Escrow.failed@1.

the SDK — escrow.disburse
import { escrow } from 'apis.vin'

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

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:11.048Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowDisburse@1",
  "value": {
    "disbursement": {
      "$type": "Payout",
      "$id": "payout_po_1",
      "payeeRef": "payee-sandbox",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "scheme": "wire",
      "destinationRef": "dest_seller_sandbox",
      "status": "paid",
      "createdAt": "2026-08-10T00:00:00.000Z",
      "ledgerRef": "ledgerentry_po_1",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "settlement-rail"
      },
      "providerData": {
        "externalId": "po_1"
      }
    },
    "state": "disbursed"
  },
  "evidence": {
    "disbursement": {
      "$type": "Payout",
      "$id": "payout_po_1",
      "payeeRef": "payee-sandbox",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "scheme": "wire",
      "destinationRef": "dest_seller_sandbox",
      "status": "paid",
      "createdAt": "2026-08-10T00:00:00.000Z",
      "ledgerRef": "ledgerentry_po_1",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "settlement-rail"
      },
      "providerData": {
        "externalId": "po_1"
      }
    },
    "state": "disbursed"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

refund

escrow.refund · POST /escrows/refund · gate offer · sandbox · answers EscrowRefund@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.

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

EmitsEscrow.failed@1 · Escrow.refunded@1.

the SDK — escrow.refund
import { escrow } from 'apis.vin'

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

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:11.062Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowRefund@1",
  "value": {
    "refund": {
      "$type": "EscrowRefund",
      "$id": "escrowrefund_erf_1",
      "handle": "escrow_es_1",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "reason": "cancelled",
      "refundedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "erf_1"
      }
    }
  },
  "evidence": {
    "refund": {
      "$type": "EscrowRefund",
      "$id": "escrowrefund_erf_1",
      "handle": "escrow_es_1",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "reason": "cancelled",
      "refundedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "erf_1"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Authorize & resolve

dispute

escrow.dispute · POST /escrows/dispute · gate offer · sandbox · answers EscrowDispute@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.

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

EmitsEscrow.disputed@1.

the SDK — escrow.dispute
import { escrow } from 'apis.vin'

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

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:11.048Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowDispute@1",
  "value": {
    "id": "escrow_d7a15fb1",
    "subjectId": "deal_09345a89",
    "amount": {
      "amount": "3465.22",
      "currency": "USD"
    },
    "balance": {
      "amount": "3465.22",
      "currency": "USD"
    },
    "conditions": [],
    "inspectionWindow": "P13D",
    "status": "Funded"
  },
  "evidence": {
    "id": "escrow_d7a15fb1",
    "subjectId": "deal_09345a89",
    "amount": {
      "amount": "3465.22",
      "currency": "USD"
    },
    "balance": {
      "amount": "3465.22",
      "currency": "USD"
    },
    "conditions": [],
    "inspectionWindow": "P13D",
    "status": "Funded"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

inspectionHold

escrow.inspectionHold · POST /escrows/inspection-hold · gate key · sandbox · answers InspectionHold@1

FieldTypeRequiredNotes
subjectstringyes
windowobjectyesbuyer inspection window before release

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

EmitsEscrow.inspectionHeld@1 · Escrow.released@1.

the SDK — escrow.inspectionHold
import { escrow } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await escrow.inspectionHold({"subject":"subject","window":{}})
POST /escrows/inspection-hold
curl -X POST https://apis.vin/escrows/inspection-hold \
  -H 'content-type: application/json' \
  -d '{"subject":"subject","window":{}}'

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.797Z · HTTP 200
{
  "type": "OK",
  "answers": "InspectionHold@1",
  "value": {
    "id": "escrow_f5036700",
    "subjectId": "deal_1f239202",
    "amount": {
      "amount": "1658.71",
      "currency": "USD"
    },
    "balance": {
      "amount": "1658.71",
      "currency": "USD"
    },
    "conditions": [],
    "inspectionWindow": "P82D",
    "status": "Disputed"
  },
  "evidence": {
    "id": "escrow_f5036700",
    "subjectId": "deal_1f239202",
    "amount": {
      "amount": "1658.71",
      "currency": "USD"
    },
    "balance": {
      "amount": "1658.71",
      "currency": "USD"
    },
    "conditions": [],
    "inspectionWindow": "P82D",
    "status": "Disputed"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

release

escrow.release · POST /escrows/release · gate offer · sandbox · answers EscrowRelease@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.

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

EmitsEscrow.failed@1 · Escrow.released@1.

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

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

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:11.062Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowRelease@1",
  "value": {
    "release": {
      "$type": "EscrowRelease",
      "$id": "escrowrelease_rel_1",
      "handle": "escrow_es_1",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "proofRef": "proofofresult_2C4RDGBGXHR789631",
      "releasedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "rel_1"
      }
    }
  },
  "evidence": {
    "release": {
      "$type": "EscrowRelease",
      "$id": "escrowrelease_rel_1",
      "handle": "escrow_es_1",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "proofRef": "proofofresult_2C4RDGBGXHR789631",
      "releasedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "rel_1"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

close

escrow.close · POST /escrows/close · gate offer · sandbox · answers EscrowClose@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.

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

EmitsEscrow.closed@1.

the SDK — escrow.close
import { escrow } from 'apis.vin'

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

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:11.038Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowClose@1",
  "value": {
    "id": "escrow_24d1a8f1",
    "subjectId": "deal_02b65bc9",
    "amount": {
      "amount": "548.78",
      "currency": "USD"
    },
    "balance": {
      "amount": "548.78",
      "currency": "USD"
    },
    "conditions": [],
    "inspectionWindow": "P39D",
    "status": "FundsVerified"
  },
  "evidence": {
    "id": "escrow_24d1a8f1",
    "subjectId": "deal_02b65bc9",
    "amount": {
      "amount": "548.78",
      "currency": "USD"
    },
    "balance": {
      "amount": "548.78",
      "currency": "USD"
    },
    "conditions": [],
    "inspectionWindow": "P39D",
    "status": "FundsVerified"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

milestoneRelease

escrow.milestoneRelease · POST /escrows/milestone-release · gate key · sandbox · answers EscrowMilestoneRelease@1

No input — this capability takes no request body.

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

EmitsEscrow.milestoneReleased@1.

the SDK — escrow.milestoneRelease
import { escrow } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await escrow.milestoneRelease()
POST /escrows/milestone-release
curl -X POST https://apis.vin/escrows/milestone-release \
  -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.798Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowMilestoneRelease@1",
  "value": {
    "release": {
      "$type": "EscrowRelease",
      "$id": "escrowrelease_rel_1",
      "handle": "escrow_es_1",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "proofRef": "proofofresult_1HGCM82633A004352",
      "releasedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "rel_1"
      }
    }
  },
  "evidence": {
    "release": {
      "$type": "EscrowRelease",
      "$id": "escrowrelease_rel_1",
      "handle": "escrow_es_1",
      "amount": {
        "amount": "500000",
        "currency": "USD"
      },
      "proofRef": "proofofresult_1HGCM82633A004352",
      "releasedAt": "2026-08-10T00:00:00.000Z",
      "provenance": {
        "environment": "sandbox",
        "simulated": true,
        "provider": "escrow-rail"
      },
      "providerData": {
        "externalId": "rel_1"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

balance

escrow.balance · GET /escrows/balance · gate key · sandbox · answers EscrowBalance@1

FieldTypeRequiredNotes
vinstringno

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

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

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:11.037Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowBalance@1",
  "value": {
    "handle": "escrow_es_1",
    "state": "held",
    "balance": {
      "amount": "500000",
      "currency": "USD"
    }
  },
  "evidence": {
    "handle": "escrow_es_1",
    "state": "held",
    "balance": {
      "amount": "500000",
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

interestAccrue

escrow.interestAccrue · POST /escrows/interest-accrue · gate key · sandbox · answers EscrowInterestAccrue@1

No input — this capability takes no request body.

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

EmitsEscrow.interestAccrued@1.

the SDK — escrow.interestAccrue
import { escrow } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await escrow.interestAccrue()
POST /escrows/interest-accrue
curl -X POST https://apis.vin/escrows/interest-accrue \
  -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.797Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowInterestAccrue@1",
  "value": {
    "id": "escrow_f44f7b2b",
    "subjectId": "deal_52a785f7",
    "amount": {
      "amount": "1694.45",
      "currency": "USD"
    },
    "balance": {
      "amount": "1694.45",
      "currency": "USD"
    },
    "conditions": [],
    "inspectionWindow": "P26D",
    "status": "InspectionHeld"
  },
  "evidence": {
    "id": "escrow_f44f7b2b",
    "subjectId": "deal_52a785f7",
    "amount": {
      "amount": "1694.45",
      "currency": "USD"
    },
    "balance": {
      "amount": "1694.45",
      "currency": "USD"
    },
    "conditions": [],
    "inspectionWindow": "P26D",
    "status": "InspectionHeld"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

ledger

escrow.ledger · GET /escrows/ledger · gate key · sandbox · answers EscrowLedger@1

FieldTypeRequiredNotes
vinstringno

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

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

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:11.048Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowLedger@1",
  "value": {
    "reference": "2C4RDGBGXHR789631",
    "entries": [
      {
        "type": "fund",
        "amount": {
          "amount": "5000.00",
          "currency": "USD"
        },
        "memo": "buyer funds held"
      },
      {
        "type": "hold",
        "amount": {
          "amount": "5000.00",
          "currency": "USD"
        },
        "memo": "outcome-contract hold"
      }
    ],
    "balance": {
      "amount": "5000.00",
      "currency": "USD"
    }
  },
  "evidence": {
    "reference": "2C4RDGBGXHR789631",
    "entries": [
      {
        "type": "fund",
        "amount": {
          "amount": "5000.00",
          "currency": "USD"
        },
        "memo": "buyer funds held"
      },
      {
        "type": "hold",
        "amount": {
          "amount": "5000.00",
          "currency": "USD"
        },
        "memo": "outcome-contract hold"
      }
    ],
    "balance": {
      "amount": "5000.00",
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

subaccount

escrow.subaccount · POST /escrows/subaccount · gate key · sandbox · answers EscrowSubaccount@1

No input — this capability takes no request body.

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

EmitsEscrow.subaccountOpened@1.

the SDK — escrow.subaccount
import { escrow } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await escrow.subaccount()
POST /escrows/subaccount
curl -X POST https://apis.vin/escrows/subaccount \
  -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.798Z · HTTP 200
{
  "type": "OK",
  "answers": "EscrowSubaccount@1",
  "value": {
    "id": "escrow_e1833615",
    "subjectId": "deal_5b47b3cd",
    "amount": {
      "amount": "2722.25",
      "currency": "USD"
    },
    "balance": {
      "amount": "2722.25",
      "currency": "USD"
    },
    "conditions": [],
    "inspectionWindow": "P66D",
    "status": "Released"
  },
  "evidence": {
    "id": "escrow_e1833615",
    "subjectId": "deal_5b47b3cd",
    "amount": {
      "amount": "2722.25",
      "currency": "USD"
    },
    "balance": {
      "amount": "2722.25",
      "currency": "USD"
    },
    "conditions": [],
    "inspectionWindow": "P66D",
    "status": "Released"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "escrow-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.

Escrow

Schema

PropertyTypeNotes
ididesc_
subjectIdref→Deal
amountmoney
balancemoney
conditionsCondition[]stips FSM gated
inspectionWindowduration
statusEscrowFSM

Relationships

FromToCardinalityAs
dealescrow1:0..1escrowed
escrowdisbursement1:1..*splits
escrowpayout1:0..*releases

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.

Escrow · Class model

Escrow · State machine

Escrow · Sequence


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