docs.vin

disbursement

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

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

Identity

Noundisbursement
PillarCommerce (facets: 2 data · 1 services · 7 commerce)
Capabilities10 — 0 live · 10 sandbox · 0 declared
EntitiesDisbursement
Doorsaggregator.vin
SDKVin.disbursement.* from apis.vin
Address/catalog/disbursement#{action} — the anchor IS the wire name minus disbursement.

Events

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

Discover & read

status

disbursement.status · GET /disbursements/status · gate none · sandbox · answers DisbursementStatus@1

FieldTypeRequiredNotes
vinstringno

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

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

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.400Z · HTTP 200
{
  "type": "OK",
  "answers": "DisbursementStatus@1",
  "value": {
    "noun": "disbursement",
    "vin": "1C4HJXDNXNW152029",
    "asOf": "2026-08-10",
    "dealId": "DL-274a29e9",
    "position": "QUOTED",
    "standing": "held",
    "disbursement": {
      "status": "no-disbursement-posted"
    },
    "statusReport": {
      "status": "pending-funding",
      "position": "QUOTED"
    }
  },
  "evidence": {
    "noun": "disbursement",
    "vin": "1C4HJXDNXNW152029",
    "asOf": "2026-08-10",
    "dealId": "DL-274a29e9",
    "position": "QUOTED",
    "standing": "held",
    "disbursement": {
      "status": "no-disbursement-posted"
    },
    "statusReport": {
      "status": "pending-funding",
      "position": "QUOTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "disbursement-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

compute

disbursement.compute · GET /disbursements/compute · gate key · sandbox · answers DisbursementCompute@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await disbursement.compute({"vin":"1C4HJXDNXNW152029"})
GET /disbursements/compute
curl 'https://apis.vin/disbursements/compute?vin=1C4HJXDNXNW152029'

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.393Z · HTTP 200
{
  "type": "OK",
  "answers": "DisbursementCompute@1",
  "value": {
    "noun": "disbursement",
    "vin": "1C4HJXDNXNW152029",
    "asOf": "2026-08-10",
    "dealId": "DL-274a29e9",
    "position": "QUOTED",
    "standing": "held",
    "disbursement": {
      "status": "no-disbursement-posted"
    },
    "compute": {
      "status": "computed",
      "lines": [
        {
          "kind": "payoff",
          "amountCents": 1471109,
          "basis": "payoff-rail-quote"
        },
        {
          "kind": "seller",
          "amountCents": 2300000,
          "basis": "asking-value-law"
        },
        {
          "kind": "fees",
          "amountCents": 12500,
          "basis": "posted-facilitation-fee"
        }
      ],
      "totalCents": 3783609
    }
  },
  "evidence": {
    "noun": "disbursement",
    "vin": "1C4HJXDNXNW152029",
    "asOf": "2026-08-10",
    "dealId": "DL-274a29e9",
    "position": "QUOTED",
    "standing": "held",
    "disbursement": {
      "status": "no-disbursement-posted"
    },
    "compute": {
      "status": "computed",
      "lines": [
        {
          "kind": "payoff",
          "amountCents": 1471109,
          "basis": "payoff-rail-quote"
        },
        {
          "kind": "seller",
          "amountCents": 2300000,
          "basis": "asking-value-law"
        },
        {
          "kind": "fees",
          "amountCents": 12500,
          "basis": "posted-facilitation-fee"
        }
      ],
      "totalCents": 3783609
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "disbursement-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

schedule

disbursement.schedule · POST /disbursements/schedule · gate offer · sandbox · answers DisbursementSchedule@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) · /1C4HJXDNXNW152029 (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.

EmitsDisbursement.requested@1 · Disbursement.scheduled@1.

the SDK — disbursement.schedule
import { disbursement } from 'apis.vin'

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

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.395Z · HTTP 200
{
  "type": "OK",
  "answers": "DisbursementSchedule@1",
  "value": {
    "noun": "disbursement",
    "vin": "1C4HJXDNXNW152029",
    "asOf": "2026-08-10",
    "dealId": "DL-274a29e9",
    "position": "QUOTED",
    "standing": "held",
    "disbursement": {
      "status": "no-disbursement-posted"
    },
    "schedule": {
      "status": "not-yet-funded",
      "position": "QUOTED"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "noun": "disbursement",
    "vin": "1C4HJXDNXNW152029",
    "asOf": "2026-08-10",
    "dealId": "DL-274a29e9",
    "position": "QUOTED",
    "standing": "held",
    "disbursement": {
      "status": "no-disbursement-posted"
    },
    "schedule": {
      "status": "not-yet-funded",
      "position": "QUOTED"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "disbursement-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

commission

disbursement.commission · POST /disbursements/commission · gate offer · sandbox · answers DisbursementCommission@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) · /1C4HJXDNXNW152029 (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.

EmitsDisbursement.commissionPaid@1 · Disbursement.failed@1.

the SDK — disbursement.commission
import { disbursement } from 'apis.vin'

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

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.389Z · HTTP 200
{
  "type": "OK",
  "answers": "DisbursementCommission@1",
  "value": {
    "payout": {
      "$type": "Payout",
      "$id": "payout_po_1",
      "payeeRef": "payee-sandbox",
      "amount": {
        "amount": "50000",
        "currency": "USD"
      },
      "scheme": "ach",
      "destinationRef": "dest_earner_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"
      }
    }
  },
  "evidence": {
    "payout": {
      "$type": "Payout",
      "$id": "payout_po_1",
      "payeeRef": "payee-sandbox",
      "amount": {
        "amount": "50000",
        "currency": "USD"
      },
      "scheme": "ach",
      "destinationRef": "dest_earner_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"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "settlement-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

remit

disbursement.remit · POST /disbursements/remit · gate offer · sandbox · answers DisbursementRemit@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) · /1C4HJXDNXNW152029 (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.

EmitsDisbursement.failed@1 · Disbursement.remitted@1.

the SDK — disbursement.remit
import { disbursement } from 'apis.vin'

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

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.394Z · HTTP 200
{
  "type": "OK",
  "answers": "DisbursementRemit@1",
  "value": {
    "payout": {
      "$type": "Payout",
      "$id": "payout_po_1",
      "payeeRef": "payee-sandbox",
      "amount": {
        "amount": "1000000",
        "currency": "USD"
      },
      "scheme": "ach",
      "destinationRef": "dest_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"
      }
    }
  },
  "evidence": {
    "payout": {
      "$type": "Payout",
      "$id": "payout_po_1",
      "payeeRef": "payee-sandbox",
      "amount": {
        "amount": "1000000",
        "currency": "USD"
      },
      "scheme": "ach",
      "destinationRef": "dest_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"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "settlement-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

instantPay

disbursement.instantPay · POST /disbursements/instant-pay · gate key · sandbox · answers DisbursementInstantPay@1

No input — this capability takes no request body.

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

EmitsDisbursement.instantPaid@1.

the SDK — disbursement.instantPay
import { disbursement } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await disbursement.instantPay()
POST /disbursements/instant-pay
curl -X POST https://apis.vin/disbursements/instant-pay \
  -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.759Z · HTTP 200
{
  "type": "OK",
  "answers": "DisbursementInstantPay@1",
  "value": {
    "payout": {
      "$type": "Payout",
      "$id": "payout_po_1",
      "payeeRef": "payee-sandbox",
      "amount": {
        "amount": "250000",
        "currency": "USD"
      },
      "scheme": "wire",
      "destinationRef": "dest_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"
      }
    }
  },
  "evidence": {
    "payout": {
      "$type": "Payout",
      "$id": "payout_po_1",
      "payeeRef": "payee-sandbox",
      "amount": {
        "amount": "250000",
        "currency": "USD"
      },
      "scheme": "wire",
      "destinationRef": "dest_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"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "settlement-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

rebateRemit

disbursement.rebateRemit · POST /disbursements/rebate-remit · gate offer · sandbox · answers DisbursementRebateRemit@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) · /1C4HJXDNXNW152029 (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.

EmitsDisbursement.failed@1 · Disbursement.rebateRemitted@1.

the SDK — disbursement.rebateRemit
import { disbursement } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await disbursement.rebateRemit({"vin":"1C4HJXDNXNW152029"})
POST /disbursements/rebate-remit
curl -X POST https://apis.vin/disbursements/rebate-remit \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXDNXNW152029"}'

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.393Z · HTTP 200
{
  "type": "OK",
  "answers": "DisbursementRebateRemit@1",
  "value": {
    "noun": "disbursement",
    "vin": "1C4HJXDNXNW152029",
    "asOf": "2026-08-10",
    "dealId": "DL-274a29e9",
    "position": "QUOTED",
    "standing": "held",
    "disbursement": {
      "status": "no-disbursement-posted"
    },
    "rebate": {
      "status": "not-yet-funded",
      "position": "QUOTED"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "noun": "disbursement",
    "vin": "1C4HJXDNXNW152029",
    "asOf": "2026-08-10",
    "dealId": "DL-274a29e9",
    "position": "QUOTED",
    "standing": "held",
    "disbursement": {
      "status": "no-disbursement-posted"
    },
    "rebate": {
      "status": "not-yet-funded",
      "position": "QUOTED"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "disbursement-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

split

disbursement.split · POST /disbursements/split · gate key · sandbox · answers DisbursementSplit@1

No input — this capability takes no request body.

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

EmitsDisbursement.split@1.

the SDK — disbursement.split
import { disbursement } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await disbursement.split()
POST /disbursements/split
curl -X POST https://apis.vin/disbursements/split \
  -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.759Z · HTTP 200
{
  "type": "OK",
  "answers": "DisbursementSplit@1",
  "value": {
    "noun": "disbursement",
    "vin": "1HGCM82633A004352",
    "asOf": "2026-08-10",
    "disbursement": {
      "status": "no-deal-on-file"
    }
  },
  "evidence": {
    "noun": "disbursement",
    "vin": "1HGCM82633A004352",
    "asOf": "2026-08-10",
    "disbursement": {
      "status": "no-deal-on-file"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "disbursement-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

reversal

disbursement.reversal · POST /disbursements/reversal · gate offer · sandbox · answers DisbursementReversal@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) · /1C4HJXDNXNW152029 (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.

EmitsDisbursement.failed@1 · Disbursement.reversed@1.

the SDK — disbursement.reversal
import { disbursement } from 'apis.vin'

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

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.394Z · HTTP 200
{
  "type": "OK",
  "answers": "DisbursementReversal@1",
  "value": {
    "noun": "disbursement",
    "vin": "1C4HJXDNXNW152029",
    "asOf": "2026-08-10",
    "dealId": "DL-274a29e9",
    "position": "QUOTED",
    "standing": "held",
    "disbursement": {
      "status": "no-disbursement-posted"
    },
    "reversal": {
      "status": "nothing-disbursed-to-reverse",
      "position": "QUOTED"
    }
  },
  "evidence": {
    "noun": "disbursement",
    "vin": "1C4HJXDNXNW152029",
    "asOf": "2026-08-10",
    "dealId": "DL-274a29e9",
    "position": "QUOTED",
    "standing": "held",
    "disbursement": {
      "status": "no-disbursement-posted"
    },
    "reversal": {
      "status": "nothing-disbursed-to-reverse",
      "position": "QUOTED"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "disbursement-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

tradePayoff

disbursement.tradePayoff · POST /disbursements/trade-payoff · gate offer · sandbox · answers DisbursementTradePayoff@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) · /1C4HJXDNXNW152029 (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.

EmitsDisbursement.failed@1 · Disbursement.tradePayoffRemitted@1.

the SDK — disbursement.tradePayoff
import { disbursement } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await disbursement.tradePayoff({"vin":"1C4HJXDNXNW152029"})
POST /disbursements/trade-payoff
curl -X POST https://apis.vin/disbursements/trade-payoff \
  -H 'content-type: application/json' \
  -d '{"vin":"1C4HJXDNXNW152029"}'

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.400Z · HTTP 200
{
  "type": "OK",
  "answers": "DisbursementTradePayoff@1",
  "value": {
    "payout": {
      "$type": "Payout",
      "$id": "payout_po_1",
      "payeeRef": "payee-sandbox",
      "amount": {
        "amount": "1800000",
        "currency": "USD"
      },
      "scheme": "wire",
      "destinationRef": "dest_lienholder_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"
      }
    }
  },
  "evidence": {
    "payout": {
      "$type": "Payout",
      "$id": "payout_po_1",
      "payeeRef": "payee-sandbox",
      "amount": {
        "amount": "1800000",
        "currency": "USD"
      },
      "scheme": "wire",
      "destinationRef": "dest_lienholder_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"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "settlement-rail-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.

Disbursement

Schema

PropertyTypeNotes
kindenumpayoff|seller|fees
amountmoney

Relationships

FromToCardinalityAs
escrowdisbursement1:1..*splits

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.

Disbursement · Class model

Disbursement · 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.