docs.vin

features

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

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

Identity

Nounfeatures
PillarData (facets: 4 data · 3 services · 4 commerce)
Capabilities11 — 1 live · 10 sandbox · 0 declared
EntitiesVehicle
Doorsfeatures.vin
SDKVin.features.* from apis.vin
Address/catalog/features#{action} — the anchor IS the wire name minus features.

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

availability

features.availability · GET /features/availability · gate key · sandbox · answers FeatureAvailability@1

FieldTypeRequiredNotes
vinstringyes

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

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

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.445Z · HTTP 200
{
  "type": "OK",
  "answers": "FeatureAvailability@1",
  "value": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "availability": {
      "feature": "remote-start",
      "available": true,
      "delivery": {
        "channel": "ota",
        "readiness": "ready",
        "connection": "active"
      }
    }
  },
  "evidence": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "availability": {
      "feature": "remote-start",
      "available": true,
      "delivery": {
        "channel": "ota",
        "readiness": "ready",
        "connection": "active"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "window-sticker-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

eligibility

features.eligibility · GET /features/eligibility · gate none · sandbox · answers FeaturesEligibility@1

FieldTypeRequiredNotes
vinstringno

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

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

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.452Z · HTTP 200
{
  "type": "OK",
  "answers": "FeaturesEligibility@1",
  "value": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "eligibility": {
      "eligible": true,
      "feature": "remote-start",
      "delivery": {
        "channel": "ota",
        "readiness": "ready",
        "connection": "active"
      }
    }
  },
  "evidence": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "eligibility": {
      "eligible": true,
      "feature": "remote-start",
      "delivery": {
        "channel": "ota",
        "readiness": "ready",
        "connection": "active"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "window-sticker-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

activeLookup

features.activeLookup · GET /features/active-lookup · gate none · sandbox · answers FeaturesActiveLookup@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await features.activeLookup({"vin":"1C6JJTBG1ML590217"})
GET /features/active-lookup
curl 'https://apis.vin/features/active-lookup?vin=1C6JJTBG1ML590217'

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.437Z · HTTP 200
{
  "type": "OK",
  "answers": "FeaturesActiveLookup@1",
  "value": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "active": {
      "features": [],
      "connection": "active"
    }
  },
  "evidence": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "active": {
      "features": [],
      "connection": "active"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "window-sticker-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

catalogLookup

features.catalogLookup · GET /features/catalog-lookup · gate none · live · answers FeaturesCatalogLookup@1

FieldTypeRequiredNotes
vinstringno

Doorfeatures.vin serves this noun on its two routes: / (the landing) · /1C6JJTBG1ML590217 (the VIN lens).

Try it — live: answers on the wire today. A sandbox key still selects the deterministic simulated mode — drive the full outcome range with the magic triggers.

the SDK — features.catalogLookup
import { features } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await features.catalogLookup({"vin":"1C6JJTBG1ML590217"})
GET /features/catalog-lookup
curl 'https://apis.vin/features/catalog-lookup?vin=1C6JJTBG1ML590217'

Apply & book

subscribe

features.subscribe · POST /features/subscribe · gate offer · sandbox · answers FeaturesSubscribe@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.

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

EmitsFeatures.subscribed@1.

the SDK — features.subscribe
import { features } from 'apis.vin'

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

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.466Z · HTTP 200
{
  "type": "OK",
  "answers": "FeaturesSubscribe@1",
  "value": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "subscription": {
      "id": "FS-7b5d29ae",
      "feature": "remote-start",
      "plan": "connected-services",
      "monthlyCents": 1900,
      "currency": "USD",
      "status": "active",
      "connection": "active"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "subscription": {
      "id": "FS-7b5d29ae",
      "feature": "remote-start",
      "plan": "connected-services",
      "monthlyCents": 1900,
      "currency": "USD",
      "status": "active",
      "connection": "active"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "window-sticker-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

features.pay · POST /features/pay · gate offer · sandbox · answers FeaturesPay@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.

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

EmitsFeatures.charged@1 · ServiceOrder.settled@1.

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

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

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.457Z · HTTP 200
{
  "type": "OK",
  "answers": "FeaturesPay@1",
  "value": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "payment": {
      "id": "PAY-d01df994",
      "feature": "remote-start",
      "amountCents": 24900,
      "currency": "USD",
      "status": "settled",
      "basis": "software-update-fee"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "payment": {
      "id": "PAY-d01df994",
      "feature": "remote-start",
      "amountCents": 24900,
      "currency": "USD",
      "status": "settled",
      "basis": "software-update-fee"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "window-sticker-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

buy

features.buy · POST /features/buy · gate offer · sandbox · answers FeaturesBuy@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.

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

EmitsFeatures.purchased@1.

the SDK — features.buy
import { features } from 'apis.vin'

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

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.446Z · HTTP 200
{
  "type": "OK",
  "answers": "FeaturesBuy@1",
  "value": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "purchase": {
      "id": "FP-16cac312",
      "feature": "remote-start",
      "kind": "one-time-unlock",
      "amountCents": 24900,
      "currency": "USD",
      "status": "purchased",
      "basis": "software-update-fee"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "purchase": {
      "id": "FP-16cac312",
      "feature": "remote-start",
      "kind": "one-time-unlock",
      "amountCents": 24900,
      "currency": "USD",
      "status": "purchased",
      "basis": "software-update-fee"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "window-sticker-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

refund

features.refund · POST /features/refund · gate offer · sandbox · answers FeaturesRefund@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.

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

EmitsFeatures.refunded@1.

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

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

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.460Z · HTTP 200
{
  "type": "OK",
  "answers": "FeaturesRefund@1",
  "value": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "refund": {
      "id": "RF-4b8c734a",
      "feature": "remote-start",
      "amountCents": 24900,
      "currency": "USD",
      "status": "issued",
      "basis": "software-update-fee"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "refund": {
      "id": "RF-4b8c734a",
      "feature": "remote-start",
      "amountCents": 24900,
      "currency": "USD",
      "status": "issued",
      "basis": "software-update-fee"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "window-sticker-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

activate

features.activate · POST /features/activate · gate offer · sandbox · answers FeatureActivation@1

FieldTypeRequiredNotes
vinstringyes
featurestringyessoftware-unlockable capability
termstringnoone of one-time, subscription
connectionIdstringno
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.

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

EmitsFeature.activated@1 · Feature.deactivated@1.

the SDK — features.activate
import { features } from 'apis.vin'

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

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.431Z · HTTP 200
{
  "type": "OK",
  "answers": "FeatureActivation@1",
  "value": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "activation": {
      "id": "FA-7c305dbe",
      "status": "activated",
      "feature": "feature",
      "delivery": "ota"
    }
  },
  "evidence": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "activation": {
      "id": "FA-7c305dbe",
      "status": "activated",
      "feature": "feature",
      "delivery": "ota"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "window-sticker-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

deactivate

features.deactivate · POST /features/deactivate · gate offer · sandbox · answers FeaturesDeactivate@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.

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

EmitsFeatures.deactivated@1.

the SDK — features.deactivate
import { features } from 'apis.vin'

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

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.447Z · HTTP 200
{
  "type": "OK",
  "answers": "FeaturesDeactivate@1",
  "value": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "deactivation": {
      "id": "FA-b5c9d822",
      "status": "deactivated",
      "feature": "remote-start",
      "delivery": "ota"
    }
  },
  "evidence": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "deactivation": {
      "id": "FA-b5c9d822",
      "status": "deactivated",
      "feature": "remote-start",
      "delivery": "ota"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "window-sticker-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

trial

features.trial · POST /features/trial · gate offer · sandbox · answers FeaturesTrial@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.

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

EmitsFeatures.trialStarted@1.

the SDK — features.trial
import { features } from 'apis.vin'

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

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.471Z · HTTP 200
{
  "type": "OK",
  "answers": "FeaturesTrial@1",
  "value": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "trial": {
      "id": "FT-61612832",
      "feature": "remote-start",
      "amountCents": 0,
      "currency": "USD",
      "status": "started",
      "connection": "active"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1C6JJTBG1ML590217",
    "noun": "features",
    "asOf": "2026-08-10",
    "vehicleId": "VEH-55fe6204",
    "year": 2026,
    "bodyStyle": "sedan",
    "drivetrain": "awd",
    "odometer": 61481,
    "condition": "clean",
    "currentOwnerId": "ID-11f17424",
    "trial": {
      "id": "FT-61612832",
      "feature": "remote-start",
      "amountCents": 0,
      "currency": "USD",
      "status": "started",
      "connection": "active"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "window-sticker-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.

Vehicle

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.

Features · Class model

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