docs.vin

webhook

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

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

Identity

Nounwebhook
PillarServices (facets: 4 data · 6 services · 1 commerce)
Capabilities11 — 0 live · 11 sandbox · 0 declared
EntitiesConnection
Doorsaggregator.vin
SDKVin.webhook.* from apis.vin
Address/catalog/webhook#{action} — the anchor IS the wire name minus webhook.

Events

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

Discover & read

read

webhook.read · GET /webhooks/read · gate none · sandbox · answers WebhookRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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:19.033Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookRead@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "endpoint": {
      "status": "no-endpoint-recorded"
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "endpoint": {
      "status": "no-endpoint-recorded"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

status

webhook.status · GET /webhooks/status · gate none · sandbox · answers WebhookStatus@1

FieldTypeRequiredNotes
vinstringno

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

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

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:19.043Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookStatus@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "wire": {
      "position": "active",
      "deliverable": true,
      "endpoint": {
        "status": "no-endpoint-recorded"
      }
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "wire": {
      "position": "active",
      "deliverable": true,
      "endpoint": {
        "status": "no-endpoint-recorded"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

register

webhook.register · POST /webhooks/register · gate offer · sandbox · answers WebhookRegister@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) · /JTEEU5JR8P5290274 (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.

EmitsWebhook.registered@1.

the SDK — webhook.register
import { webhook } from 'apis.vin'

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

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:19.033Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookRegister@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "registration": {
      "status": "registered",
      "id": "WHK-0b3ede9c"
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "registration": {
      "status": "registered",
      "id": "WHK-0b3ede9c"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

subscribe

webhook.subscribe · POST /webhooks/subscribe · gate offer · sandbox · answers WebhookSubscribe@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) · /JTEEU5JR8P5290274 (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.

EmitsWebhook.subscribed@1.

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

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

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:19.047Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookSubscribe@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "subscription": {
      "status": "subscribed",
      "id": "WHS-e26c48a3",
      "endpointId": "WHK-0b3ede9c"
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "subscription": {
      "status": "subscribed",
      "id": "WHS-e26c48a3",
      "endpointId": "WHK-0b3ede9c"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

unsubscribe

webhook.unsubscribe · POST /webhooks/unsubscribe · gate offer · sandbox · answers WebhookUnsubscribe@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) · /JTEEU5JR8P5290274 (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.

EmitsWebhook.unsubscribed@1.

the SDK — webhook.unsubscribe
import { webhook } from 'apis.vin'

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

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:19.059Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookUnsubscribe@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "subscription": {
      "status": "no-subscription-recorded"
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "subscription": {
      "status": "no-subscription-recorded"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

meteredPay

webhook.meteredPay · POST /webhooks/metered-pay · gate offer · sandbox · answers WebhookMeteredPay@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) · /JTEEU5JR8P5290274 (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.

EmitsWebhook.failed@1 · Webhook.meteredPaid@1.

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

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

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:19.027Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookMeteredPay@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "payment": {
      "status": "no-webhook-metering-posted"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "payment": {
      "status": "no-webhook-metering-posted"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

deliveryLog

webhook.deliveryLog · GET /webhooks/delivery-log · gate key · sandbox · answers WebhookDeliveryLog@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await webhook.deliveryLog({"vin":"JTEEU5JR8P5290274"})
GET /webhooks/delivery-log
curl 'https://apis.vin/webhooks/delivery-log?vin=JTEEU5JR8P5290274'

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:19.024Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookDeliveryLog@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "log": {
      "status": "no-deliveries-recorded",
      "deliveries": []
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "log": {
      "status": "no-deliveries-recorded",
      "deliveries": []
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

emit

webhook.emit · POST /webhooks/emit · gate offer · sandbox · answers WebhookEmit@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) · /JTEEU5JR8P5290274 (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.

EmitsWebhook.emitted@1.

the SDK — webhook.emit
import { webhook } from 'apis.vin'

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

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:19.025Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookEmit@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "emission": {
      "status": "no-endpoint-recorded"
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "emission": {
      "status": "no-endpoint-recorded"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

replay

webhook.replay · POST /webhooks/replay · gate offer · sandbox · answers WebhookReplay@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) · /JTEEU5JR8P5290274 (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.

EmitsWebhook.replayed@1.

the SDK — webhook.replay
import { webhook } from 'apis.vin'

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

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:19.043Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookReplay@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "replay": {
      "status": "no-delivery-recorded"
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "replay": {
      "status": "no-delivery-recorded"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

retry

webhook.retry · POST /webhooks/retry · gate offer · sandbox · answers WebhookRetry@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) · /JTEEU5JR8P5290274 (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.

EmitsWebhook.retried@1.

the SDK — webhook.retry
import { webhook } from 'apis.vin'

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

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:19.043Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookRetry@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "retry": {
      "status": "no-delivery-recorded"
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "retry": {
      "status": "no-delivery-recorded"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

retryState

webhook.retryState · GET /webhooks/retry-state · gate none · sandbox · answers WebhookRetryState@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await webhook.retryState({"vin":"JTEEU5JR8P5290274"})
GET /webhooks/retry-state
curl 'https://apis.vin/webhooks/retry-state?vin=JTEEU5JR8P5290274'

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:19.043Z · HTTP 200
{
  "type": "OK",
  "answers": "WebhookRetryState@1",
  "value": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "retryState": {
      "status": "no-delivery-recorded"
    }
  },
  "evidence": {
    "vin": "JTEEU5JR8P5290274",
    "noun": "webhook",
    "asOf": "2026-08-10",
    "connId": "conn_628fd210",
    "status": "active",
    "scopes": [
      "read",
      "pull",
      "push"
    ],
    "kind": "system",
    "retryState": {
      "status": "no-delivery-recorded"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "connection-wire-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.

Webhook · Class model

Webhook · State machine

Webhook · Sequence


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