docs.vin

subscription

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

subscription 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

Nounsubscription
PillarServices (facets: 4 data · 5 services · 5 commerce)
Capabilities14 — 0 live · 14 sandbox · 0 declared
EntitiesUsage
Doorsaggregator.vin
SDKVin.subscription.* from apis.vin
Address/catalog/subscription#{action} — the anchor IS the wire name minus subscription.

Events

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

Discover & read

read

subscription.read · GET /subscriptions/read · gate none · sandbox · answers SubscriptionRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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.796Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionRead@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "active"
    },
    "usage": {
      "metric": "active-listings",
      "units": 1,
      "basis": "fleet-census"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "active"
    },
    "usage": {
      "metric": "active-listings",
      "units": 1,
      "basis": "fleet-census"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

status

subscription.status · GET /subscriptions/status · gate none · sandbox · answers SubscriptionStatus@1

FieldTypeRequiredNotes
vinstringno

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

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

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.806Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionStatus@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "active"
    },
    "usage": {
      "metric": "active-listings",
      "units": 1,
      "basis": "fleet-census"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "active"
    },
    "usage": {
      "metric": "active-listings",
      "units": 1,
      "basis": "fleet-census"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

quote

subscription.quote · POST /subscriptions/quote · gate offer · sandbox · answers SubscriptionQuote@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) · /5GAEVBKS2TJ264421 (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.

EmitsSubscription.failed@1 · Subscription.quoted@1.

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

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

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.796Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionQuote@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "quote": {
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "period": "monthly"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "quote": {
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "period": "monthly"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

enroll

subscription.enroll · POST /subscriptions/enroll · gate offer · sandbox · answers SubscriptionEnroll@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) · /5GAEVBKS2TJ264421 (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.

EmitsSubscription.enrolled@1.

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

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

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.772Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionEnroll@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "active"
    },
    "subscriber": {
      "dealerId": "DLR-b9066ade",
      "dealer": "The Estate Store"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "active"
    },
    "subscriber": {
      "dealerId": "DLR-b9066ade",
      "dealer": "The Estate Store"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

subscription.pay · POST /subscriptions/pay · gate offer · sandbox · answers SubscriptionPay@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) · /5GAEVBKS2TJ264421 (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.

EmitsSubscription.failed@1 · Subscription.paid@1.

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

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

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.791Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionPay@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "payment": {
      "id": "PAY-e3b0a43e",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "period": "monthly",
      "status": "settled"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "payment": {
      "id": "PAY-e3b0a43e",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "period": "monthly",
      "status": "settled"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

charge

subscription.charge · POST /subscriptions/charge · gate offer · sandbox · answers SubscriptionCharge@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) · /5GAEVBKS2TJ264421 (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.

EmitsSubscription.charged@1 · Subscription.failed@1.

the SDK — subscription.charge
import { subscription } from 'apis.vin'

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

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.771Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionCharge@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "payment": {
      "id": "PAY-e3b0a43e",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "period": "monthly",
      "status": "settled"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "payment": {
      "id": "PAY-e3b0a43e",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "period": "monthly",
      "status": "settled"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

refund

subscription.refund · POST /subscriptions/refund · gate offer · sandbox · answers SubscriptionRefund@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) · /5GAEVBKS2TJ264421 (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.

EmitsSubscription.failed@1 · Subscription.refunded@1.

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

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

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.799Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionRefund@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "refund": {
      "id": "RF-29b91622",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "refunded"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "refund": {
      "id": "RF-29b91622",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "refunded"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

activate

subscription.activate · POST /subscriptions/activate · gate offer · sandbox · answers SubscriptionActivate@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) · /5GAEVBKS2TJ264421 (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.

EmitsSubscription.activated@1.

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

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

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.771Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionActivate@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "active"
    },
    "subscriber": {
      "dealerId": "DLR-b9066ade",
      "dealer": "The Estate Store"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "amountCents": 14900,
      "currency": "USD",
      "status": "active"
    },
    "subscriber": {
      "dealerId": "DLR-b9066ade",
      "dealer": "The Estate Store"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

cancel

subscription.cancel · POST /subscriptions/cancel · gate offer · sandbox · answers SubscriptionCancel@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) · /5GAEVBKS2TJ264421 (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.

EmitsSubscription.canceled@1.

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

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

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.771Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionCancel@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "cancellation": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "status": "canceled",
      "effectiveOn": "2026-08-10"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "cancellation": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "status": "canceled",
      "effectiveOn": "2026-08-10"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

pause

subscription.pause · POST /subscriptions/pause · gate offer · sandbox · answers SubscriptionPause@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) · /5GAEVBKS2TJ264421 (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.

EmitsSubscription.paused@1.

the SDK — subscription.pause
import { subscription } from 'apis.vin'

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

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.782Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionPause@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "pause": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "status": "paused",
      "pausedOn": "2026-08-10"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "pause": {
      "id": "LS-ae1785eb",
      "plan": "market-listings",
      "status": "paused",
      "pausedOn": "2026-08-10"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

plan

subscription.plan · GET /subscriptions/plan · gate none · sandbox · answers SubscriptionPlan@1

FieldTypeRequiredNotes
vinstringno

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

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

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.791Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionPlan@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "plans": [
      {
        "plan": "market-listings",
        "amountCents": 14900,
        "currency": "USD",
        "period": "monthly",
        "subscribedVia": "listing.subscribe"
      },
      {
        "plan": "vault-standard",
        "amountCents": 4900,
        "currency": "USD",
        "period": "monthly",
        "subscribedVia": "documentVault.subscribe"
      },
      {
        "plan": "market-data",
        "amountCents": 9900,
        "currency": "USD",
        "period": "monthly",
        "subscribedVia": "dealer.subscribe"
      }
    ]
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "plans": [
      {
        "plan": "market-listings",
        "amountCents": 14900,
        "currency": "USD",
        "period": "monthly",
        "subscribedVia": "listing.subscribe"
      },
      {
        "plan": "vault-standard",
        "amountCents": 4900,
        "currency": "USD",
        "period": "monthly",
        "subscribedVia": "documentVault.subscribe"
      },
      {
        "plan": "market-data",
        "amountCents": 9900,
        "currency": "USD",
        "period": "monthly",
        "subscribedVia": "dealer.subscribe"
      }
    ]
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

proration

subscription.proration · POST /subscriptions/proration · gate offer · sandbox · answers SubscriptionProration@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) · /5GAEVBKS2TJ264421 (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.

EmitsSubscription.failed@1 · Subscription.prorated@1.

the SDK — subscription.proration
import { subscription } from 'apis.vin'

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

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.796Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionProration@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "proration": {
      "fromPlan": "market-listings",
      "toPlan": "market-listings",
      "currentCents": 14900,
      "targetCents": 14900,
      "netCents": 0,
      "currency": "USD",
      "basis": "plan-difference"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "proration": {
      "fromPlan": "market-listings",
      "toPlan": "market-listings",
      "currentCents": 14900,
      "targetCents": 14900,
      "netCents": 0,
      "currency": "USD",
      "basis": "plan-difference"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

swap

subscription.swap · POST /subscriptions/swap · gate offer · sandbox · answers SubscriptionSwap@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) · /5GAEVBKS2TJ264421 (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.

EmitsSubscription.swapped@1.

the SDK — subscription.swap
import { subscription } from 'apis.vin'

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

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.806Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionSwap@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "swap": {
      "status": "already-on-plan",
      "plan": "market-listings"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "swap": {
      "status": "already-on-plan",
      "plan": "market-listings"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

usage

subscription.usage · GET /subscriptions/usage · gate key · sandbox · answers SubscriptionUsage@1

FieldTypeRequiredNotes
vinstringno

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

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

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.808Z · HTTP 200
{
  "type": "OK",
  "answers": "SubscriptionUsage@1",
  "value": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "usage": {
      "plan": "market-listings",
      "metric": "active-listings",
      "units": 1,
      "basis": "fleet-census"
    }
  },
  "evidence": {
    "noun": "subscription",
    "asOf": "2026-08-10",
    "usage": {
      "plan": "market-listings",
      "metric": "active-listings",
      "units": 1,
      "basis": "fleet-census"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "dealer-floor-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.

Usage

Modeled

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

Subscription · Class model

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