docs.vin

gap

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

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

Identity

Noungap
PillarCommerce (facets: 3 data · 3 services · 5 commerce)
Capabilities11 — 0 live · 11 sandbox · 0 declared
EntitiesProtectionProduct
Doorsaggregator.vin
SDKVin.gap.* from apis.vin
Address/catalog/gap#{action} — the anchor IS the wire name minus gap.

Events

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

Discover & read

eligibility

gap.eligibility · GET /gaps/eligibility · gate key · sandbox · answers GapEligibility@1

FieldTypeRequiredNotes
vinstringno

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

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

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:12.055Z · HTTP 200
{
  "type": "OK",
  "answers": "GapEligibility@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "eligibility": {
      "eligible": true,
      "product": "GAP"
    },
    "note": {
      "standing": "eligible",
      "loanStatus": "Current"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "eligibility": {
      "eligible": true,
      "product": "GAP"
    },
    "note": {
      "standing": "eligible",
      "loanStatus": "Current"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

quote

gap.quote · POST /gaps/quote · gate offer · sandbox · answers GapQuote@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) · /5FNYF6H73NB002534 (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.

EmitsGap.failed@1 · Gap.quoted@1.

the SDK — gap.quote
import { gap } from 'apis.vin'

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

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:12.060Z · HTTP 200
{
  "type": "OK",
  "answers": "GapQuote@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "quote": {
      "id": "PP-86ef1257",
      "productType": "GAP",
      "planCode": "GAP-STD",
      "terms": [
        {
          "termMonths": 60,
          "termMiles": 0,
          "retailCents": 91300
        },
        {
          "termMonths": 72,
          "termMiles": 0,
          "retailCents": 101500
        }
      ],
      "tier": "super-prime"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "quote": {
      "id": "PP-86ef1257",
      "productType": "GAP",
      "planCode": "GAP-STD",
      "terms": [
        {
          "termMonths": 60,
          "termMiles": 0,
          "retailCents": 91300
        },
        {
          "termMonths": 72,
          "termMiles": 0,
          "retailCents": 101500
        }
      ],
      "tier": "super-prime"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

rate

gap.rate · GET /gaps/rate · gate key · sandbox · answers GapRate@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await gap.rate({"vin":"5FNYF6H73NB002534"})
GET /gaps/rate
curl 'https://apis.vin/gaps/rate?vin=5FNYF6H73NB002534'

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:12.062Z · HTTP 200
{
  "type": "OK",
  "answers": "GapRate@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "quote": {
      "id": "PP-86ef1257",
      "productType": "GAP",
      "planCode": "GAP-STD",
      "terms": [
        {
          "termMonths": 60,
          "termMiles": 0,
          "retailCents": 91300
        },
        {
          "termMonths": 72,
          "termMiles": 0,
          "retailCents": 101500
        }
      ],
      "tier": "super-prime"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "quote": {
      "id": "PP-86ef1257",
      "productType": "GAP",
      "planCode": "GAP-STD",
      "terms": [
        {
          "termMonths": 60,
          "termMiles": 0,
          "retailCents": 91300
        },
        {
          "termMonths": 72,
          "termMiles": 0,
          "retailCents": 101500
        }
      ],
      "tier": "super-prime"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

claimCompute

gap.claimCompute · GET /gaps/claim-compute · gate key · sandbox · answers GapClaimCompute@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await gap.claimCompute({"vin":"5FNYF6H73NB002534"})
GET /gaps/claim-compute
curl 'https://apis.vin/gaps/claim-compute?vin=5FNYF6H73NB002534'

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:12.053Z · HTTP 200
{
  "type": "OK",
  "answers": "GapClaimCompute@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "computation": {
      "payoffCents": 2240317,
      "settlementCents": 2300000,
      "deficiencyCents": 0,
      "currency": "USD",
      "lienholder": "Huntington National Bank",
      "coveredLoss": "none",
      "noteStanding": "eligible",
      "basis": "net-payoff-minus-settlement-value"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "computation": {
      "payoffCents": 2240317,
      "settlementCents": 2300000,
      "deficiencyCents": 0,
      "currency": "USD",
      "lienholder": "Huntington National Bank",
      "coveredLoss": "none",
      "noteStanding": "eligible",
      "basis": "net-payoff-minus-settlement-value"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

register

gap.register · POST /gaps/register · gate offer · sandbox · answers GapRegister@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) · /5FNYF6H73NB002534 (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.

EmitsGap.registered@1.

the SDK — gap.register
import { gap } from 'apis.vin'

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

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:12.072Z · HTTP 200
{
  "type": "OK",
  "answers": "GapRegister@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "contract": {
      "id": "PP-86ef1257",
      "productType": "GAP",
      "status": "registered"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "contract": {
      "id": "PP-86ef1257",
      "productType": "GAP",
      "status": "registered"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

gap.pay · POST /gaps/pay · gate offer · sandbox · answers GapPay@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) · /5FNYF6H73NB002534 (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.

EmitsGap.failed@1 · Gap.paid@1.

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

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

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:12.055Z · HTTP 200
{
  "type": "OK",
  "answers": "GapPay@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "payment": {
      "id": "PAY-f6edb6f7",
      "contractId": "PP-86ef1257",
      "amountCents": 91300,
      "currency": "USD",
      "status": "settled",
      "basis": "rated-retail-premium"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "payment": {
      "id": "PAY-f6edb6f7",
      "contractId": "PP-86ef1257",
      "amountCents": 91300,
      "currency": "USD",
      "status": "settled",
      "basis": "rated-retail-premium"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

refund

gap.refund · POST /gaps/refund · gate offer · sandbox · answers GapRefund@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) · /5FNYF6H73NB002534 (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.

EmitsGap.failed@1 · Gap.refunded@1.

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

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

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:12.065Z · HTTP 200
{
  "type": "OK",
  "answers": "GapRefund@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "refund": {
      "id": "PP-86ef1257",
      "amountCents": 67344,
      "currency": "USD",
      "basis": "pro-rata",
      "status": "refunded"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "refund": {
      "id": "PP-86ef1257",
      "amountCents": 67344,
      "currency": "USD",
      "basis": "pro-rata",
      "status": "refunded"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

claimPay

gap.claimPay · POST /gaps/claim-pay · gate offer · sandbox · answers GapClaimPay@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) · /5FNYF6H73NB002534 (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.

EmitsGap.claimPaid@1 · Gap.failed@1.

the SDK — gap.claimPay
import { gap } from 'apis.vin'

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

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:12.054Z · HTTP 200
{
  "type": "OK",
  "answers": "GapClaimPay@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "payment": {
      "status": "no-covered-loss",
      "id": "PP-86ef1257"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "payment": {
      "status": "no-covered-loss",
      "id": "PP-86ef1257"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Authorize & resolve

claim

gap.claim · POST /gaps/claim · gate offer · sandbox · answers GapClaim@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) · /5FNYF6H73NB002534 (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.

EmitsGap.claimFiled@1.

the SDK — gap.claim
import { gap } from 'apis.vin'

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

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:12.053Z · HTTP 200
{
  "type": "OK",
  "answers": "GapClaim@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "claim": {
      "status": "no-covered-loss",
      "id": "PP-86ef1257"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "claim": {
      "status": "no-covered-loss",
      "id": "PP-86ef1257"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

cancel

gap.cancel · POST /gaps/cancel · gate offer · sandbox · answers GapCancel@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) · /5FNYF6H73NB002534 (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.

EmitsGap.canceled@1 · Gap.failed@1 · Gap.refunded@1.

the SDK — gap.cancel
import { gap } from 'apis.vin'

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

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:12.053Z · HTTP 200
{
  "type": "OK",
  "answers": "GapCancel@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "cancellation": {
      "id": "PP-86ef1257",
      "status": "cancelled",
      "basis": "pro-rata",
      "refundCents": 67344,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "cancellation": {
      "id": "PP-86ef1257",
      "status": "cancelled",
      "basis": "pro-rata",
      "refundCents": 67344,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

contract

gap.contract · POST /gaps/contract · gate offer · sandbox · answers GapContract@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) · /5FNYF6H73NB002534 (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.

EmitsGap.contracted@1.

the SDK — gap.contract
import { gap } from 'apis.vin'

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

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:12.054Z · HTTP 200
{
  "type": "OK",
  "answers": "GapContract@1",
  "value": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "contract": {
      "id": "PP-86ef1257",
      "productType": "GAP",
      "status": "active"
    }
  },
  "evidence": {
    "vin": "5FNYF6H73NB002534",
    "noun": "gap",
    "asOf": "2026-08-10",
    "id": "PP-86ef1257",
    "dealId": "DL-b58e1191",
    "holderId": "ID-11f17424",
    "product": "GAP",
    "term": 60,
    "premium": 91300,
    "contract": {
      "id": "PP-86ef1257",
      "productType": "GAP",
      "status": "active"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "fi-back-end-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.

ProtectionProduct

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.

Gap · Class model

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