docs.vin

telematics

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

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

Identity

Nountelematics
PillarServices (facets: 13 data · 14 services · 4 commerce)
Capabilities31 — 0 live · 31 sandbox · 0 declared
EntitiesConnection
Doorsaggregator.vin
SDKVin.telematics.* from apis.vin
Address/catalog/telematics#{action} — the anchor IS the wire name minus telematics.

Events

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

Discover & read

read

telematics.read · GET /telematics/read · gate none · sandbox · answers TelematicsRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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:18.019Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsRead@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "channels": [
      "location",
      "odometer",
      "battery",
      "diagnostics"
    ],
    "freshness": "stale"
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "channels": [
      "location",
      "odometer",
      "battery",
      "diagnostics"
    ],
    "freshness": "stale"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

locate

telematics.locate · GET /telematics/locate · gate none · sandbox · answers TelematicsLocate@1

FieldTypeRequiredNotes
vinstringno

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

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

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:18.003Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsLocate@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "position": {
      "latE5": 3776783,
      "lonE5": -12242258
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "position": {
      "latE5": 3776783,
      "lonE5": -12242258
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

report

telematics.report · POST /telematics/report · gate offer · sandbox · answers TelematicsReport@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.reported@1.

the SDK — telematics.report
import { telematics } from 'apis.vin'

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

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:18.114Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsReport@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "channels": [
      "location",
      "odometer",
      "battery",
      "diagnostics"
    ],
    "freshness": "stale"
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "channels": [
      "location",
      "odometer",
      "battery",
      "diagnostics"
    ],
    "freshness": "stale"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

drivingBehaviorRead

telematics.drivingBehaviorRead · GET /telematics/driving-behavior-read · gate none · sandbox · answers TelematicsDrivingBehaviorRead@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await telematics.drivingBehaviorRead({"vin":"1GKS2JKL4MR268409"})
GET /telematics/driving-behavior-read
curl 'https://apis.vin/telematics/driving-behavior-read?vin=1GKS2JKL4MR268409'

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:17.987Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsDrivingBehaviorRead@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "behaviorScore": 54
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "behaviorScore": 54
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

healthRead

telematics.healthRead · GET /telematics/health-read · gate none · sandbox · answers TelematicsHealthRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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:17.999Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsHealthRead@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "findings": [
      "vehicle telemetry flags a system needing service"
    ]
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "findings": [
      "vehicle telemetry flags a system needing service"
    ]
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

odometerRead

telematics.odometerRead · GET /telematics/odometer-read · gate none · sandbox · answers TelematicsOdometerRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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:18.009Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsOdometerRead@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "odometerMiles": 35353,
    "unit": "mi"
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "odometerMiles": 35353,
    "unit": "mi"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

tripRead

telematics.tripRead · GET /telematics/trip-read · gate none · sandbox · answers TelematicsTripRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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:18.115Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsTripRead@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "trips": 8,
    "totalMiles": 266,
    "windowDays": 30
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "trips": 8,
    "totalMiles": 266,
    "windowDays": 30
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

geofenceStatus

telematics.geofenceStatus · GET /telematics/geofence-status · gate none · sandbox · answers TelematicsGeofenceStatus@1

FieldTypeRequiredNotes
vinstringno

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

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

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:17.996Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsGeofenceStatus@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "geofence": {
      "id": "GF-5a9e5868",
      "inside": false
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "geofence": {
      "id": "GF-5a9e5868",
      "inside": false
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

enroll

telematics.enroll · POST /telematics/enroll · gate offer · sandbox · answers TelematicsEnroll@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.enrolled@1.

the SDK — telematics.enroll
import { telematics } from 'apis.vin'

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

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:17.992Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsEnroll@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-7727dfcd",
      "name": "enroll",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-7727dfcd",
      "name": "enroll",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

subscribe

telematics.subscribe · POST /telematics/subscribe · gate offer · sandbox · answers TelematicsSubscribe@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.subscribed@1.

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

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

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:18.115Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsSubscribe@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-a325a74b",
      "name": "subscribe",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-a325a74b",
      "name": "subscribe",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

provision

telematics.provision · POST /telematics/provision · gate offer · sandbox · answers TelematicsProvision@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.provisioned@1.

the SDK — telematics.provision
import { telematics } from 'apis.vin'

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

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:18.019Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsProvision@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-a7d4bf08",
      "name": "provision",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-a7d4bf08",
      "name": "provision",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

deprovision

telematics.deprovision · POST /telematics/deprovision · gate offer · sandbox · answers TelematicsDeprovision@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.deprovisioned@1.

the SDK — telematics.deprovision
import { telematics } from 'apis.vin'

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

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:17.979Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsDeprovision@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-be8807ad",
      "name": "deprovision",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-be8807ad",
      "name": "deprovision",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

telematics.pay · POST /telematics/pay · gate offer · sandbox · answers TelematicsPay@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) · /1GKS2JKL4MR268409 (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.

EmitsServiceOrder.settled@1 · Telematics.charged@1 · Telematics.failed@1 · Telematics.paid@1.

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

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

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:18.016Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsPay@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "payment": {
      "id": "PAY-d1716a71",
      "status": "settled",
      "amountCents": 2400,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "payment": {
      "id": "PAY-d1716a71",
      "status": "settled",
      "amountCents": 2400,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

usageBill

telematics.usageBill · POST /telematics/usage-bill · gate offer · sandbox · answers TelematicsUsageBill@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.failed@1 · Telematics.usageBilled@1.

the SDK — telematics.usageBill
import { telematics } from 'apis.vin'

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

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:18.115Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsUsageBill@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "bill": {
      "id": "UB-e28e859d",
      "amountCents": 2400,
      "currency": "USD",
      "status": "issued"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "bill": {
      "id": "UB-e28e859d",
      "amountCents": 2400,
      "currency": "USD",
      "status": "issued"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

dataSell

telematics.dataSell · POST /telematics/data-sell · gate offer · sandbox · answers TelematicsDataSell@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.dataSold@1.

the SDK — telematics.dataSell
import { telematics } from 'apis.vin'

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

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:17.979Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsDataSell@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "sale": {
      "id": "DS-d08e7c8d",
      "records": 764,
      "amountCents": 1200,
      "currency": "USD",
      "status": "settled"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "sale": {
      "id": "DS-d08e7c8d",
      "records": 764,
      "amountCents": 1200,
      "currency": "USD",
      "status": "settled"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

otaUpdate

telematics.otaUpdate · POST /telematics/ota-update · gate offer · sandbox · answers TelematicsOtaUpdate@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.otaUpdated@1.

the SDK — telematics.otaUpdate
import { telematics } from 'apis.vin'

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

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:18.016Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsOtaUpdate@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-7c2b5f24",
      "name": "otaUpdate",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-7c2b5f24",
      "name": "otaUpdate",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

alert

telematics.alert · POST /telematics/alert · gate offer · sandbox · answers TelematicsAlert@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.alerted@1.

the SDK — telematics.alert
import { telematics } from 'apis.vin'

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

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:17.970Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsAlert@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-defe3fe1",
      "name": "alert",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-defe3fe1",
      "name": "alert",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

compliance

telematics.compliance · GET /telematics/compliance · gate key · sandbox · answers TelematicsCompliance@1

FieldTypeRequiredNotes
vinstringno

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

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

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:17.977Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsCompliance@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "compliant": false,
    "regime": "hours-of-service"
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "compliant": false,
    "regime": "hours-of-service"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

geofenceEvents

telematics.geofenceEvents · GET /telematics/geofence-events · gate key · sandbox · answers TelematicsGeofenceEvents@1

FieldTypeRequiredNotes
vinstringno

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

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

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:17.993Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsGeofenceEvents@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "events": 1,
    "windowDays": 30
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "events": 1,
    "windowDays": 30
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

geofenceSet

telematics.geofenceSet · POST /telematics/geofence-set · gate offer · sandbox · answers TelematicsGeofenceSet@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.geofenceSet@1.

the SDK — telematics.geofenceSet
import { telematics } from 'apis.vin'

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

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:17.993Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsGeofenceSet@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-7413fe99",
      "name": "geofenceSet",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-7413fe99",
      "name": "geofenceSet",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

harshEvents

telematics.harshEvents · GET /telematics/harsh-events · gate key · sandbox · answers TelematicsHarshEvents@1

FieldTypeRequiredNotes
vinstringno

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

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

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:17.999Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsHarshEvents@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "harshEventCount": 3,
    "windowDays": 90
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "harshEventCount": 3,
    "windowDays": 90
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

idle

telematics.idle · GET /telematics/idle · gate key · sandbox · answers TelematicsIdle@1

FieldTypeRequiredNotes
vinstringno

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

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

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:18.003Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsIdle@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "idleMinutes": 187,
    "windowDays": 30
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "idleMinutes": 187,
    "windowDays": 30
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

paymentReminder

telematics.paymentReminder · POST /telematics/payment-reminder · gate key · sandbox · answers TelematicsPaymentReminder@1

No input — this capability takes no request body.

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

EmitsTelematics.paymentReminded@1.

the SDK — telematics.paymentReminder
import { telematics } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await telematics.paymentReminder()
POST /telematics/payment-reminder
curl -X POST https://apis.vin/telematics/payment-reminder \
  -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:10.059Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsPaymentReminder@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "active",
    "command": {
      "id": "CMD-a4c87311",
      "name": "paymentReminder",
      "status": "executed"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "active",
    "command": {
      "id": "CMD-a4c87311",
      "name": "paymentReminder",
      "status": "executed"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

remoteLock

telematics.remoteLock · POST /telematics/remote-lock · gate offer · sandbox · answers TelematicsRemoteLock@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.remoteLocked@1.

the SDK — telematics.remoteLock
import { telematics } from 'apis.vin'

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

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:18.114Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsRemoteLock@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-5c714734",
      "name": "remoteLock",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-5c714734",
      "name": "remoteLock",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

remoteStart

telematics.remoteStart · POST /telematics/remote-start · gate offer · sandbox · answers TelematicsRemoteStart@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.remoteStarted@1.

the SDK — telematics.remoteStart
import { telematics } from 'apis.vin'

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

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:18.114Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsRemoteStart@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-d3b6ce19",
      "name": "remoteStart",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-d3b6ce19",
      "name": "remoteStart",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

remoteUnlock

telematics.remoteUnlock · POST /telematics/remote-unlock · gate offer · sandbox · answers TelematicsRemoteUnlock@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.remoteUnlocked@1.

the SDK — telematics.remoteUnlock
import { telematics } from 'apis.vin'

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

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:18.114Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsRemoteUnlock@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-4507c8a3",
      "name": "remoteUnlock",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-4507c8a3",
      "name": "remoteUnlock",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

setGeofence

telematics.setGeofence · POST /telematics/set-geofence · gate offer · sandbox · answers TelematicsSetGeofence@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) · /1GKS2JKL4MR268409 (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.

EmitsTelematics.geofenceSet@1.

the SDK — telematics.setGeofence
import { telematics } from 'apis.vin'

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

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:18.115Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsSetGeofence@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-ba740685",
      "name": "setGeofence",
      "status": "queued-offline"
    }
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "command": {
      "id": "CMD-ba740685",
      "name": "setGeofence",
      "status": "queued-offline"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

starterDisable

telematics.starterDisable · POST /telematics/starter-disable · gate key · sandbox · answers TelematicsStarterDisable@1

No input — this capability takes no request body.

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

EmitsTelematics.starterDisabled@1.

the SDK — telematics.starterDisable
import { telematics } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await telematics.starterDisable()
POST /telematics/starter-disable
curl -X POST https://apis.vin/telematics/starter-disable \
  -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:10.060Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsStarterDisable@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "active",
    "command": {
      "id": "CMD-76246276",
      "name": "starterDisable",
      "status": "executed"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "active",
    "command": {
      "id": "CMD-76246276",
      "name": "starterDisable",
      "status": "executed"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

starterEnable

telematics.starterEnable · POST /telematics/starter-enable · gate key · sandbox · answers TelematicsStarterEnable@1

No input — this capability takes no request body.

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

EmitsTelematics.starterEnabled@1.

the SDK — telematics.starterEnable
import { telematics } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await telematics.starterEnable()
POST /telematics/starter-enable
curl -X POST https://apis.vin/telematics/starter-enable \
  -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:10.060Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsStarterEnable@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "active",
    "command": {
      "id": "CMD-f0662d3d",
      "name": "starterEnable",
      "status": "executed"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "active",
    "command": {
      "id": "CMD-f0662d3d",
      "name": "starterEnable",
      "status": "executed"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

stream

telematics.stream · GET /telematics/stream · gate none · sandbox · answers TelematicsStream@1

FieldTypeRequiredNotes
vinstringno

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

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

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:18.115Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsStream@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "channels": [
      "location",
      "odometer",
      "battery",
      "diagnostics"
    ],
    "freshness": "stale"
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "verdict": "attention",
    "channels": [
      "location",
      "odometer",
      "battery",
      "diagnostics"
    ],
    "freshness": "stale"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

usage

telematics.usage · GET /telematics/usage · gate key · sandbox · answers TelematicsUsage@1

FieldTypeRequiredNotes
vinstringno

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

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

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:18.115Z · HTTP 200
{
  "type": "OK",
  "answers": "TelematicsUsage@1",
  "value": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "meteredMiles": 931,
    "windowDays": 30
  },
  "evidence": {
    "vin": "1GKS2JKL4MR268409",
    "noun": "telematics",
    "asOf": "2026-08-10",
    "connection": "expired",
    "meteredMiles": 931,
    "windowDays": 30
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "aftersales-data-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.

Connection

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.

Telematics · Class model

Telematics · State machine

Telematics · Sequence


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