source
The source noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 0 live, 14 sandbox, 0 declared.
source is one of the estate's 317 automotive nouns — a job a car needs done. It carries 14 capabilities: 0 live, 14 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | source |
| Pillar | Data (facets: 6 data · 6 services · 2 commerce) |
| Capabilities | 14 — 0 live · 14 sandbox · 0 declared |
| Entities | Connection |
| Doors | aggregator.vin |
| SDK | Vin.source.* from apis.vin |
| Address | /catalog/source#{action} — the anchor IS the wire name minus source. |
Events
The vocabulary this noun can append to the record — 10 past-tense, versioned event types, each linked to the capability that emits it:
Source.credentialed@1— emitted bycredentialSource.failed@1— emitted byperQueryPay·subscribePaySource.provisioned@1— emitted byprovisionSource.pulled@1— emitted bypullSource.pushed@1— emitted bypushSource.queryPaid@1— emitted byperQueryPaySource.reconciled@1— emitted byreconcileSource.requested@1— emitted bypullSource.subscribed@1— emitted bysubscribeSource.subscriptionPaid@1— emitted bysubscribePay
Discover & read
read
source.read · GET /sources/read · gate none · sandbox · answers SourceRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.read({"vin":"7SAYGDED7TF515801"})curl 'https://apis.vin/sources/read?vin=7SAYGDED7TF515801'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.
{
"type": "OK",
"answers": "SourceRead@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"source": {
"id": "SRC-b692d167",
"connection": "active",
"entitlements": [
"read",
"pull",
"push"
]
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"source": {
"id": "SRC-b692d167",
"connection": "active",
"entitlements": [
"read",
"pull",
"push"
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}verify
source.verify · GET /sources/verify · gate key · sandbox · answers SourceVerify@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.verify({"vin":"7SAYGDED7TF515801"})curl 'https://apis.vin/sources/verify?vin=7SAYGDED7TF515801'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.
{
"type": "OK",
"answers": "SourceVerify@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"verification": {
"id": "SRC-b692d167",
"verified": true,
"connection": "active"
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"verification": {
"id": "SRC-b692d167",
"verified": true,
"connection": "active"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}coverage
source.coverage · GET /sources/coverage · gate key · sandbox · answers SourceCoverage@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.coverage({"vin":"7SAYGDED7TF515801"})curl 'https://apis.vin/sources/coverage?vin=7SAYGDED7TF515801'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.
{
"type": "OK",
"answers": "SourceCoverage@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"coverage": {
"connections": 5,
"byStatus": {
"pending": 1,
"active": 1,
"degraded": 1,
"expired": 1,
"revoked": 1
}
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"coverage": {
"connections": 5,
"byStatus": {
"pending": 1,
"active": 1,
"degraded": 1,
"expired": 1,
"revoked": 1
}
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
subscribe
source.subscribe · POST /sources/subscribe · gate offer · sandbox · answers SourceSubscribe@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
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.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
Emits — Source.subscribed@1.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.subscribe({"vin":"7SAYGDED7TF515801"})curl -X POST https://apis.vin/sources/subscribe \
-H 'content-type: application/json' \
-d '{"vin":"7SAYGDED7TF515801"}'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.
{
"type": "OK",
"answers": "SourceSubscribe@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"subscription": {
"id": "SS-95aa003c",
"plan": "data-feed",
"amountCents": 9900,
"currency": "USD",
"status": "active"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"subscription": {
"id": "SS-95aa003c",
"plan": "data-feed",
"amountCents": 9900,
"currency": "USD",
"status": "active"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}credential
source.credential · POST /sources/credential · gate offer · sandbox · answers SourceCredential@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
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.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
Emits — Source.credentialed@1.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.credential({"vin":"7SAYGDED7TF515801"})curl -X POST https://apis.vin/sources/credential \
-H 'content-type: application/json' \
-d '{"vin":"7SAYGDED7TF515801"}'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.
{
"type": "OK",
"answers": "SourceCredential@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"credential": {
"id": "CRD-1b02c67c",
"sourceId": "SRC-b692d167",
"scope": [
"read",
"pull",
"push"
],
"status": "issued"
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"credential": {
"id": "CRD-1b02c67c",
"sourceId": "SRC-b692d167",
"scope": [
"read",
"pull",
"push"
],
"status": "issued"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}provision
source.provision · POST /sources/provision · gate offer · sandbox · answers SourceProvision@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
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.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
Emits — Source.provisioned@1.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.provision({"vin":"7SAYGDED7TF515801"})curl -X POST https://apis.vin/sources/provision \
-H 'content-type: application/json' \
-d '{"vin":"7SAYGDED7TF515801"}'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.
{
"type": "OK",
"answers": "SourceProvision@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"provisioning": {
"status": "already-provisioned",
"id": "SRC-b692d167",
"connection": "active"
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"provisioning": {
"status": "already-provisioned",
"id": "SRC-b692d167",
"connection": "active"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
reconcile
source.reconcile · POST /sources/reconcile · gate offer · sandbox · answers SourceReconcile@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
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.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
Emits — Source.reconciled@1.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.reconcile({"vin":"7SAYGDED7TF515801"})curl -X POST https://apis.vin/sources/reconcile \
-H 'content-type: application/json' \
-d '{"vin":"7SAYGDED7TF515801"}'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.
{
"type": "OK",
"answers": "SourceReconcile@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"reconciliation": {
"id": "SRC-b692d167",
"pulled": 4,
"matched": 4,
"discrepancies": 0,
"status": "clean"
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"reconciliation": {
"id": "SRC-b692d167",
"pulled": 4,
"matched": 4,
"discrepancies": 0,
"status": "clean"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}perQueryPay
source.perQueryPay · POST /sources/per-query-pay · gate offer · sandbox · answers SourcePerQueryPay@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
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.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
Emits — Source.failed@1 · Source.queryPaid@1.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.perQueryPay({"vin":"7SAYGDED7TF515801"})curl -X POST https://apis.vin/sources/per-query-pay \
-H 'content-type: application/json' \
-d '{"vin":"7SAYGDED7TF515801"}'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.
{
"type": "OK",
"answers": "SourcePerQueryPay@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"payment": {
"id": "PAY-6c3bda2f",
"amountCents": 25,
"currency": "USD",
"unit": "query",
"status": "settled"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"payment": {
"id": "PAY-6c3bda2f",
"amountCents": 25,
"currency": "USD",
"unit": "query",
"status": "settled"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}subscribePay
source.subscribePay · POST /sources/subscribe-pay · gate offer · sandbox · answers SourceSubscribePay@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
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.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
Emits — Source.failed@1 · Source.subscriptionPaid@1.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.subscribePay({"vin":"7SAYGDED7TF515801"})curl -X POST https://apis.vin/sources/subscribe-pay \
-H 'content-type: application/json' \
-d '{"vin":"7SAYGDED7TF515801"}'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.
{
"type": "OK",
"answers": "SourceSubscribePay@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"payment": {
"id": "PAY-16a0db68",
"amountCents": 9900,
"currency": "USD",
"period": "monthly",
"status": "settled"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"payment": {
"id": "PAY-16a0db68",
"amountCents": 9900,
"currency": "USD",
"period": "monthly",
"status": "settled"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
catalog
source.catalog · GET /sources/catalog · gate none · sandbox · answers SourceCatalog@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.catalog({"vin":"7SAYGDED7TF515801"})curl 'https://apis.vin/sources/catalog?vin=7SAYGDED7TF515801'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.
{
"type": "OK",
"answers": "SourceCatalog@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"catalog": {
"id": "SRC-b692d167",
"channels": [
"location",
"odometer",
"battery",
"diagnostics"
],
"channelCount": 4
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"catalog": {
"id": "SRC-b692d167",
"channels": [
"location",
"odometer",
"battery",
"diagnostics"
],
"channelCount": 4
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}entitlements
source.entitlements · GET /sources/entitlements · gate none · sandbox · answers SourceEntitlements@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.entitlements({"vin":"7SAYGDED7TF515801"})curl 'https://apis.vin/sources/entitlements?vin=7SAYGDED7TF515801'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.
{
"type": "OK",
"answers": "SourceEntitlements@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"entitlements": {
"id": "SRC-b692d167",
"connection": "active",
"scopes": [
"read",
"pull",
"push"
]
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"entitlements": {
"id": "SRC-b692d167",
"connection": "active",
"scopes": [
"read",
"pull",
"push"
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}freshness
source.freshness · GET /sources/freshness · gate key · sandbox · answers SourceFreshness@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.freshness({"vin":"7SAYGDED7TF515801"})curl 'https://apis.vin/sources/freshness?vin=7SAYGDED7TF515801'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.
{
"type": "OK",
"answers": "SourceFreshness@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"freshness": {
"id": "SRC-b692d167",
"freshness": "live",
"connection": "active"
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"freshness": {
"id": "SRC-b692d167",
"freshness": "live",
"connection": "active"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}pull
source.pull · POST /sources/pull · gate offer · sandbox · answers SourcePull@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
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.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
Emits — Source.pulled@1 · Source.requested@1.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.pull({"vin":"7SAYGDED7TF515801"})curl -X POST https://apis.vin/sources/pull \
-H 'content-type: application/json' \
-d '{"vin":"7SAYGDED7TF515801"}'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.
{
"type": "OK",
"answers": "SourcePull@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"pull": {
"status": "pulled",
"id": "SRC-b692d167",
"channels": [
"location",
"odometer",
"battery",
"diagnostics"
],
"freshness": "live"
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"pull": {
"status": "pulled",
"id": "SRC-b692d167",
"channels": [
"location",
"odometer",
"battery",
"diagnostics"
],
"freshness": "live"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}push
source.push · POST /sources/push · gate offer · sandbox · answers SourcePush@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
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.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /7SAYGDED7TF515801 (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.
Emits — Source.pushed@1.
import { source } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await source.push({"vin":"7SAYGDED7TF515801"})curl -X POST https://apis.vin/sources/push \
-H 'content-type: application/json' \
-d '{"vin":"7SAYGDED7TF515801"}'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.
{
"type": "OK",
"answers": "SourcePush@1",
"value": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"push": {
"status": "accepted",
"id": "SRC-b692d167",
"channels": [
"location",
"odometer",
"battery",
"diagnostics"
]
}
},
"evidence": {
"vin": "7SAYGDED7TF515801",
"noun": "source",
"asOf": "2026-08-10",
"sourceId": "SRC-b692d167",
"push": {
"status": "accepted",
"id": "SRC-b692d167",
"channels": [
"location",
"odometer",
"battery",
"diagnostics"
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "car-desk-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.
Source · Class model
Source · State machine
Source · State machine
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
softwareUpdate
The softwareUpdate noun — identity, lifecycle, events, and every capability as an anchored section: 15 capabilities, 0 live, 15 sandbox, 0 declared.
sourcing
The sourcing noun — identity, lifecycle, events, and every capability as an anchored section: 13 capabilities, 0 live, 13 sandbox, 0 declared.