docs.vin

connection

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

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

Identity

Nounconnection
PillarServices (facets: 6 data · 8 services · 2 commerce)
Capabilities16 — 0 live · 16 sandbox · 0 declared
EntitiesConnection
Doorsapis.vin
SDKVin.connection.* from apis.vin
Address/catalog/connection#{action} — the anchor IS the wire name minus connection.

Lifecycle

ConnectionConnectionFSM: 5 states, 5 transitions — pending · active · degraded · revoked · expired. Each transition is a past-tense event on the record.

Events

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

Discover & read

read

connection.read · GET /connections/read · gate none · sandbox · answers ConnectionRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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:09.381Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionRead@1",
  "value": {
    "connection": "conn_5858d656",
    "kind": "consumer-carrier",
    "provider": "acme-mutual",
    "status": "active",
    "scopes": [
      "read:policy",
      "read:coverage"
    ],
    "properties": [
      {
        "vin": "KM8R7DGE0RU709816",
        "insured": true,
        "label": "active policy"
      }
    ],
    "vaultRef": "crd__ef9fcda3",
    "createdAt": "2026-08-10T00:00:00.000Z",
    "refreshedAt": "2026-08-10T00:00:00.000Z"
  },
  "evidence": {
    "connection": "conn_5858d656",
    "kind": "consumer-carrier",
    "provider": "acme-mutual",
    "status": "active",
    "scopes": [
      "read:policy",
      "read:coverage"
    ],
    "properties": [
      {
        "vin": "KM8R7DGE0RU709816",
        "insured": true,
        "label": "active policy"
      }
    ],
    "vaultRef": "crd__ef9fcda3",
    "createdAt": "2026-08-10T00:00:00.000Z",
    "refreshedAt": "2026-08-10T00:00:00.000Z"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

status

connection.status · GET /connections/status · gate none · sandbox · answers ConnectionStatus@1

FieldTypeRequiredNotes
vinstringno

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

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

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:09.402Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionStatus@1",
  "value": {
    "connection": "conn_5858d656",
    "status": "active",
    "provider": "acme-mutual",
    "kind": "consumer-carrier",
    "active": true
  },
  "evidence": {
    "connection": "conn_5858d656",
    "status": "active",
    "provider": "acme-mutual",
    "kind": "consumer-carrier",
    "active": true
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

verify

connection.verify · POST /connections/verify · gate key · sandbox · answers Verification@1

FieldTypeRequiredNotes
checkstringyesone of insurance-proof, ownership, dealer-credential, income
connstringnoconn_… supplying the account-verified evidence
vinstringno
requirementstringnothe named requirement to clear (a stip, an ownership claim, a dealer-standing check)

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

EmitsConnection.verified@1 · Verification.posted@1.

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

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

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:09.406Z · HTTP 200
{
  "type": "OK",
  "answers": "Verification@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "connection",
    "asOf": "2026-08-10",
    "connId": "conn_c0f1966c",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "verification": {
      "verified": true,
      "check": "insurance-proof",
      "id": "VRF-15bc6aba"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "connection",
    "asOf": "2026-08-10",
    "connId": "conn_c0f1966c",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "verification": {
      "verified": true,
      "check": "insurance-proof",
      "id": "VRF-15bc6aba"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  },
  "connect": {
    "type": "OFFER",
    "kind": "connect",
    "reason": "CONNECTION_ABSENT",
    "portClass": "connections-rail",
    "state": "absent",
    "url": "https://integrates.vin/connect/connections-rail",
    "message": "connection.verify is live via connection — certified, connect to activate: complete the connections-rail link ceremony at https://integrates.vin/connect/connections-rail. The credential vault (auth.vin) holds the token, and the same call answers simulated:false — activation is the token, never a deploy."
  }
}

audit

connection.audit · GET /connections/audit · gate key · sandbox · answers ConnectionAudit@1

FieldTypeRequiredNotes
vinstringno

Doorapis.vin serves this noun on its two routes: / (the landing) · /KM8R7DGE0RU709816 (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 — connection.audit
import { connection } from 'apis.vin'

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

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:09.376Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionAudit@1",
  "value": {
    "connection": "conn_5858d656",
    "trail": [
      {
        "event": "connection.linked",
        "at": "2026-08-10T00:00:00.000Z"
      },
      {
        "event": "sync.completed",
        "at": "2026-08-10T00:00:00.000Z",
        "sync": "sync_53ed2cb1"
      }
    ],
    "evidenceCount": 3,
    "products": [
      "policy",
      "coverage",
      "thirdParties"
    ],
    "auditedAt": "2026-08-10T00:00:00.000Z"
  },
  "evidence": {
    "connection": "conn_5858d656",
    "trail": [
      {
        "event": "connection.linked",
        "at": "2026-08-10T00:00:00.000Z"
      },
      {
        "event": "sync.completed",
        "at": "2026-08-10T00:00:00.000Z",
        "sync": "sync_53ed2cb1"
      }
    ],
    "evidenceCount": 3,
    "products": [
      "policy",
      "coverage",
      "thirdParties"
    ],
    "auditedAt": "2026-08-10T00:00:00.000Z"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

accessFee

connection.accessFee · POST /connections/access-fee · gate offer · sandbox · answers ConnectionAccessFee@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.

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

EmitsConnection.accessFeeAssessed@1 · Connection.failed@1.

the SDK — connection.accessFee
import { connection } from 'apis.vin'

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

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:09.364Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionAccessFee@1",
  "value": {
    "connection": "conn_5858d656",
    "status": "assessed",
    "accessFee": {
      "amount": "1907",
      "currency": "USD"
    },
    "period": "2026-08",
    "provider": "acme-mutual",
    "assessedAt": "2026-08-10T00:00:00.000Z"
  },
  "evidence": {
    "connection": "conn_5858d656",
    "status": "assessed",
    "accessFee": {
      "amount": "1907",
      "currency": "USD"
    },
    "period": "2026-08",
    "provider": "acme-mutual",
    "assessedAt": "2026-08-10T00:00:00.000Z"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

meteredPay

connection.meteredPay · POST /connections/metered-pay · gate offer · sandbox · answers ConnectionMeteredPay@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.

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

EmitsConnection.failed@1 · Connection.meteredPaid@1.

the SDK — connection.meteredPay
import { connection } from 'apis.vin'

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

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:09.380Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionMeteredPay@1",
  "value": {
    "connection": "conn_5858d656",
    "status": "paid",
    "payment": "cpay_186dc519",
    "calls": 568,
    "unitPrice": {
      "amount": "2",
      "currency": "USD"
    },
    "amount": {
      "amount": "1136",
      "currency": "USD"
    },
    "period": "2026-08",
    "paidAt": "2026-08-10T00:00:00.000Z"
  },
  "evidence": {
    "connection": "conn_5858d656",
    "status": "paid",
    "payment": "cpay_186dc519",
    "calls": 568,
    "unitPrice": {
      "amount": "2",
      "currency": "USD"
    },
    "amount": {
      "amount": "1136",
      "currency": "USD"
    },
    "period": "2026-08",
    "paidAt": "2026-08-10T00:00:00.000Z"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

sync

connection.sync · POST /connections/sync · gate key · sandbox · answers Sync@1

FieldTypeRequiredNotes
connstringyesconn_… to pull through
productsarray<string>nowhat to pull (policy, odometer, balance, standing, …)
vinstringno
authoritystringnomnd_… — REQUIRED when the act spends/obligates (act:* scope with nonzero third-party price)

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

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

EmitsConnection.synced@1 · Sync.completed@1 · Sync.failed@1 · Verification.posted@1.

the SDK — connection.sync
import { connection } from 'apis.vin'

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

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:09.402Z · HTTP 200
{
  "type": "OK",
  "answers": "Sync@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "connection",
    "asOf": "2026-08-10",
    "connId": "conn_c0f1966c",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "sync": {
      "status": "completed",
      "id": "SYN-d28bcdad",
      "at": "2026-08-10"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "connection",
    "asOf": "2026-08-10",
    "connId": "conn_c0f1966c",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "sync": {
      "status": "completed",
      "id": "SYN-d28bcdad",
      "at": "2026-08-10"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  },
  "connect": {
    "type": "OFFER",
    "kind": "connect",
    "reason": "CONNECTION_ABSENT",
    "portClass": "connections-rail",
    "state": "absent",
    "url": "https://integrates.vin/connect/connections-rail",
    "message": "connection.sync is live via connection — certified, connect to activate: complete the connections-rail link ceremony at https://integrates.vin/connect/connections-rail. The credential vault (auth.vin) holds the token, and the same call answers simulated:false — activation is the token, never a deploy."
  }
}

lastSync

connection.lastSync · GET /connections/last-sync · gate none · sandbox · answers ConnectionLastSync@1

FieldTypeRequiredNotes
vinstringno

Doorapis.vin serves this noun on its two routes: / (the landing) · /KM8R7DGE0RU709816 (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 — connection.lastSync
import { connection } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connection.lastSync({"vin":"KM8R7DGE0RU709816"})
GET /connections/last-sync
curl 'https://apis.vin/connections/last-sync?vin=KM8R7DGE0RU709816'

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:09.378Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionLastSync@1",
  "value": {
    "connection": "conn_5858d656",
    "lastSync": "sync_53ed2cb1",
    "status": "completed",
    "completedAt": "2026-08-10T00:00:00.000Z",
    "evidenceCount": 3
  },
  "evidence": {
    "connection": "conn_5858d656",
    "lastSync": "sync_53ed2cb1",
    "status": "completed",
    "completedAt": "2026-08-10T00:00:00.000Z",
    "evidenceCount": 3
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Authorize & resolve

authorize

connection.authorize · POST /connections/authorize · gate offer · sandbox · answers ConnectionAuthorize@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.

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

EmitsConnection.authorized@1.

the SDK — connection.authorize
import { connection } from 'apis.vin'

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

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:09.377Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionAuthorize@1",
  "value": {
    "link": "link_51379549",
    "status": "created",
    "providerClass": "carrier",
    "scopes": [
      "read:policy",
      "read:coverage"
    ],
    "handoff": {
      "outcome": "NEEDS_HUMAN",
      "url": "https://auth.vin/link/9GQS-ZN54",
      "shortUrl": "https://auth.vin/link/9GQS-ZN54",
      "pollUrl": "https://apis.vin/connections/links/link_51379549",
      "expiresAt": "2026-08-10T04:00:00.000Z",
      "terminus": "account holder (authorize)"
    }
  },
  "evidence": {
    "link": "link_51379549",
    "status": "created",
    "providerClass": "carrier",
    "scopes": [
      "read:policy",
      "read:coverage"
    ],
    "handoff": {
      "outcome": "NEEDS_HUMAN",
      "url": "https://auth.vin/link/9GQS-ZN54",
      "shortUrl": "https://auth.vin/link/9GQS-ZN54",
      "pollUrl": "https://apis.vin/connections/links/link_51379549",
      "expiresAt": "2026-08-10T04:00:00.000Z",
      "terminus": "account holder (authorize)"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

revoke

connection.revoke · POST /connections/revoke · gate offer · sandbox · answers ConnectionRevoke@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.

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

EmitsConnection.revoked@1.

the SDK — connection.revoke
import { connection } from 'apis.vin'

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

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:09.394Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionRevoke@1",
  "value": {
    "connection": "conn_5858d656",
    "status": "revoked",
    "revoked": true
  },
  "evidence": {
    "connection": "conn_5858d656",
    "status": "revoked",
    "revoked": true
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

accounts

connection.accounts · GET /connections/accounts · gate key · sandbox · answers Connection@1

Promoted — earned its own page: /catalog/connection.accounts (computed on every regen: price posted + carries its own stateSet).

FieldTypeRequiredNotes
idstringnoconn_… to read; omit to list the caller's connections
actionstringnoone of read, list, revoke, health

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

EmitsConnection.degraded@1 · Connection.expired@1 · Connection.revoked@1.

the SDK — connection.accounts
import { connection } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connection.accounts({"id":"id","action":"read"})
GET /connections/accounts
curl 'https://apis.vin/connections/accounts?id=id&action=read'

Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.

receipt · executed 2026-08-16T14:50:09.705Z · HTTP 200
{
  "type": "OK",
  "answers": "Connection@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "connection",
    "asOf": "2026-08-10",
    "connId": "conn_c0f1966c",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ]
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "connection",
    "asOf": "2026-08-10",
    "connId": "conn_c0f1966c",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ]
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": true
  }
}

health

connection.health · GET /connections/health · gate key · sandbox · answers ConnectionHealth@1

FieldTypeRequiredNotes
vinstringno

Doorapis.vin serves this noun on its two routes: / (the landing) · /KM8R7DGE0RU709816 (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 — connection.health
import { connection } from 'apis.vin'

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

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:09.378Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionHealth@1",
  "value": {
    "connection": "conn_5858d656",
    "status": "active",
    "healthy": true,
    "lastRefreshedAt": "2026-08-10T00:00:00.000Z"
  },
  "evidence": {
    "connection": "conn_5858d656",
    "status": "active",
    "healthy": true,
    "lastRefreshedAt": "2026-08-10T00:00:00.000Z"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

connection.link · POST /connections/link · gate human · sandbox · answers Link@1

FieldTypeRequiredNotes
subjectstringyesconsumer/dealer/account party ref the link binds to
vinstringno
providerstringnoprovider slug, optional; else provider_class picker in ceremony
providerClassstringnoone of oauth-native, credential-ceremony, licensed-api, aggregator, system
scopesarray<string>yesread:/act: grants; granted ⊆ requested, only narrows
webhookstringno
brandstringnowhite-label embed (B2A2D)
expiresAtstringnoformat date-time

The gate is a 403 NEEDS_HUMAN — the human verb authorize · demand side, routed to a named, staffed, priced terminus with a poll rail. Never a dead end. Price: not posted — see /pricing.

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

EmitsConnection.linked@1 · Link.created@1.

the SDK — connection.link
import { connection } from 'apis.vin'

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

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:09.379Z · HTTP 200
{
  "type": "OK",
  "answers": "Link@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "connection",
    "asOf": "2026-08-10",
    "connId": "conn_c0f1966c",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "link": {
      "status": "already-linked",
      "connId": "conn_c0f1966c"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "connection",
    "asOf": "2026-08-10",
    "connId": "conn_c0f1966c",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "link": {
      "status": "already-linked",
      "connId": "conn_c0f1966c"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  },
  "connect": {
    "type": "OFFER",
    "kind": "connect",
    "reason": "CONNECTION_ABSENT",
    "portClass": "connections-rail",
    "state": "absent",
    "url": "https://integrates.vin/connect/connections-rail",
    "message": "connection.link is live via connection — certified, connect to activate: complete the connections-rail link ceremony at https://integrates.vin/connect/connections-rail. The credential vault (auth.vin) holds the token, and the same call answers simulated:false — activation is the token, never a deploy."
  }
}

reconnect

connection.reconnect · POST /connections/reconnect · gate offer · sandbox · answers ConnectionReconnect@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.

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

EmitsConnection.reconnected@1.

the SDK — connection.reconnect
import { connection } from 'apis.vin'

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

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:09.381Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionReconnect@1",
  "value": {
    "connection": "conn_5858d656",
    "priorStatus": "degraded",
    "status": "active",
    "reconnected": true,
    "provider": "acme-mutual",
    "kind": "consumer-carrier",
    "reconnectedAt": "2026-08-10T00:00:00.000Z"
  },
  "evidence": {
    "connection": "conn_5858d656",
    "priorStatus": "degraded",
    "status": "active",
    "reconnected": true,
    "provider": "acme-mutual",
    "kind": "consumer-carrier",
    "reconnectedAt": "2026-08-10T00:00:00.000Z"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

refresh

connection.refresh · POST /connections/refresh · gate offer · sandbox · answers ConnectionRefresh@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.

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

EmitsConnection.refreshed@1.

the SDK — connection.refresh
import { connection } from 'apis.vin'

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

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:09.391Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionRefresh@1",
  "value": {
    "connection": "conn_5858d656",
    "sync": "sync_53ed2cb1",
    "status": "completed",
    "refreshedAt": "2026-08-10T00:00:00.000Z",
    "products": [
      "policy",
      "coverage",
      "thirdParties"
    ]
  },
  "evidence": {
    "connection": "conn_5858d656",
    "sync": "sync_53ed2cb1",
    "status": "completed",
    "refreshedAt": "2026-08-10T00:00:00.000Z",
    "products": [
      "policy",
      "coverage",
      "thirdParties"
    ]
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

scopes

connection.scopes · GET /connections/scopes · gate none · sandbox · answers ConnectionScopes@1

FieldTypeRequiredNotes
vinstringno

Doorapis.vin serves this noun on its two routes: / (the landing) · /KM8R7DGE0RU709816 (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 — connection.scopes
import { connection } from 'apis.vin'

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

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:09.394Z · HTTP 200
{
  "type": "OK",
  "answers": "ConnectionScopes@1",
  "value": {
    "connection": "conn_5858d656",
    "scopes": [
      "read:policy",
      "read:coverage"
    ],
    "kind": "consumer-carrier"
  },
  "evidence": {
    "connection": "conn_5858d656",
    "scopes": [
      "read:policy",
      "read:coverage"
    ],
    "kind": "consumer-carrier"
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connections-rail-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Data model

The record shape behind this noun — one entity, each property an evidence field. See the whole estate model on the data model page.

Connection

Schema

PropertyTypeNotes
connIdidconn_
kindenumconsumer-carrier|consumer-oem|consumer-lender|dealer-source|system
providerstring
holderIdref→Party
scopesScope[]
credentialRefref→Credential
statusConnectionFSM
propertiesLinkedProp[]vin + insured|authorized
createdAtdatetime
refreshedAtdatetime
expiresAtdatetime

Relationships

FromToCardinalityAs
partyconnection1:0..*owns
connectioncredential1:1custody

Modeled

The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. 6 diagrams, rendered from the estate model.

Connection · Class model

Connection · State machine

Connection · Sequence

Connection · Class model

Connection · State machine

Connection · Sequence


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