docs.vin

fieldAction

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

fieldAction 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

NounfieldAction
PillarData (facets: 6 data · 6 services · 2 commerce)
Capabilities14 — 0 live · 14 sandbox · 0 declared
EntitiesVehicleRecord
Doorsaggregator.vin
SDKVin.fieldAction.* from apis.vin
Address/catalog/fieldAction#{action} — the anchor IS the wire name minus fieldAction.

Events

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

Discover & read

lookup

fieldAction.lookup · GET /field-actions/lookup · gate none · sandbox · answers FieldActionLookup@1

FieldTypeRequiredNotes
vinstringno

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

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

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:11.531Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionLookup@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "fieldAction": {
      "status": "no-open-field-action"
    },
    "openCount": 0
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "fieldAction": {
      "status": "no-open-field-action"
    },
    "openCount": 0
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

status

fieldAction.status · GET /field-actions/status · gate none · sandbox · answers FieldActionStatus@1

FieldTypeRequiredNotes
vinstringno

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

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

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:11.542Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionStatus@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "fieldAction": {
      "status": "no-open-field-action"
    },
    "openCount": 0
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "fieldAction": {
      "status": "no-open-field-action"
    },
    "openCount": 0
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

statusRead

fieldAction.statusRead · GET /field-actions/status-read · gate none · sandbox · answers FieldActionStatusRead@1

FieldTypeRequiredNotes
vinstringno

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

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

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:11.544Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionStatusRead@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "fieldAction": {
      "status": "no-open-field-action"
    },
    "openCount": 0
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "fieldAction": {
      "status": "no-open-field-action"
    },
    "openCount": 0
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

stopSaleCheck

fieldAction.stopSaleCheck · GET /field-actions/stop-sale-check · gate none · sandbox · answers FieldActionStopSaleCheck@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await fieldAction.stopSaleCheck({"vin":"1GKS1AKD0RR240447"})
GET /field-actions/stop-sale-check
curl 'https://apis.vin/field-actions/stop-sale-check?vin=1GKS1AKD0RR240447'

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:11.558Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionStopSaleCheck@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "stopSale": {
      "standing": "no-stop-sale"
    }
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "stopSale": {
      "standing": "no-stop-sale"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

subscribe

fieldAction.subscribe · POST /field-actions/subscribe · gate key · sandbox · answers FieldActionSubscribe@1

No input — this capability takes no request body.

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

EmitsFieldAction.subscribed@1.

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

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

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

receipt · executed 2026-08-16T14:50:09.823Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionSubscribe@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "subscription": {
      "id": "FS-120f42d4",
      "topic": "field-action-notices",
      "status": "active"
    }
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "subscription": {
      "id": "FS-120f42d4",
      "topic": "field-action-notices",
      "status": "active"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

reimburse

fieldAction.reimburse · POST /field-actions/reimburse · gate offer · sandbox · answers FieldActionReimburse@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) · /1GKS1AKD0RR240447 (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.

EmitsFieldAction.reimburseRequested@1 · FieldAction.reimbursed@1.

the SDK — fieldAction.reimburse
import { fieldAction } from 'apis.vin'

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

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:11.537Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionReimburse@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "reimbursement": {
      "id": "FR-95211473",
      "status": "refused",
      "amountCents": 0,
      "currency": "USD",
      "reason": "no-open-field-action"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "reimbursement": {
      "id": "FR-95211473",
      "status": "refused",
      "amountCents": 0,
      "currency": "USD",
      "reason": "no-open-field-action"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Authorize & resolve

claim

fieldAction.claim · POST /field-actions/claim · gate offer · sandbox · answers FieldActionClaim@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) · /1GKS1AKD0RR240447 (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.

EmitsFieldAction.claimFailed@1 · FieldAction.claimRequested@1 · FieldAction.claimed@1.

the SDK — fieldAction.claim
import { fieldAction } from 'apis.vin'

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

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:11.514Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionClaim@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "claim": {
      "id": "FC-4c270917",
      "status": "refused",
      "reason": "no-open-field-action"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "claim": {
      "id": "FC-4c270917",
      "status": "refused",
      "reason": "no-open-field-action"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

clear

fieldAction.clear · POST /field-actions/clear · gate offer · sandbox · answers FieldActionClear@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) · /1GKS1AKD0RR240447 (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.

EmitsFieldAction.clearRequested@1 · FieldAction.cleared@1.

the SDK — fieldAction.clear
import { fieldAction } from 'apis.vin'

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

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:11.516Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionClear@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "clearance": {
      "status": "cleared"
    }
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "clearance": {
      "status": "cleared"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

flag

fieldAction.flag · POST /field-actions/flag · gate offer · sandbox · answers FieldActionFlag@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) · /1GKS1AKD0RR240447 (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.

EmitsFieldAction.flagRequested@1 · FieldAction.flagged@1.

the SDK — fieldAction.flag
import { fieldAction } from 'apis.vin'

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

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:11.523Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionFlag@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "flag": {
      "flagged": false
    }
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "flag": {
      "flagged": false
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

release

fieldAction.release · POST /field-actions/release · gate offer · sandbox · answers FieldActionRelease@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) · /1GKS1AKD0RR240447 (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.

EmitsFieldAction.releaseFailed@1 · FieldAction.releaseRequested@1 · FieldAction.released@1.

the SDK — fieldAction.release
import { fieldAction } from 'apis.vin'

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

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:11.539Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionRelease@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "release": {
      "status": "released"
    }
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "release": {
      "status": "released"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

byVin

fieldAction.byVin · GET /field-actions/by-vin · gate none · sandbox · answers FieldActionByVin@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await fieldAction.byVin({"vin":"1GKS1AKD0RR240447"})
GET /field-actions/by-vin
curl 'https://apis.vin/field-actions/by-vin?vin=1GKS1AKD0RR240447'

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:11.514Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionByVin@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "fieldAction": {
      "status": "no-open-field-action"
    },
    "openCount": 0
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "fieldAction": {
      "status": "no-open-field-action"
    },
    "openCount": 0
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

holdInventory

fieldAction.holdInventory · POST /field-actions/hold-inventory · gate offer · sandbox · answers FieldActionHoldInventory@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) · /1GKS1AKD0RR240447 (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.

EmitsFieldAction.holdInventoried@1 · FieldAction.holdInventoryRequested@1 · FieldAction.inventoryHeld@1.

the SDK — fieldAction.holdInventory
import { fieldAction } from 'apis.vin'

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

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:11.528Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionHoldInventory@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "hold": {
      "status": "no-grounds",
      "standing": "no-stop-sale"
    }
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "hold": {
      "status": "no-grounds",
      "standing": "no-stop-sale"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

remedy

fieldAction.remedy · POST /field-actions/remedy · gate offer · sandbox · answers FieldActionRemedy@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) · /1GKS1AKD0RR240447 (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.

EmitsFieldAction.remedied@1 · FieldAction.remedyRequested@1.

the SDK — fieldAction.remedy
import { fieldAction } from 'apis.vin'

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

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:11.542Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionRemedy@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "remedyAvailable": false
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "remedyAvailable": false
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

stopSale

fieldAction.stopSale · POST /field-actions/stop-sale · gate offer · sandbox · answers FieldActionStopSale@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) · /1GKS1AKD0RR240447 (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.

EmitsFieldAction.stopSaleIssued@1.

the SDK — fieldAction.stopSale
import { fieldAction } from 'apis.vin'

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

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:11.551Z · HTTP 200
{
  "type": "OK",
  "answers": "FieldActionStopSale@1",
  "value": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "stopSale": {
      "status": "no-grounds",
      "standing": "no-stop-sale"
    }
  },
  "evidence": {
    "vin": "1GKS1AKD0RR240447",
    "noun": "fieldAction",
    "asOf": "2026-08-10",
    "open": false,
    "stopSale": {
      "status": "no-grounds",
      "standing": "no-stop-sale"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "oem-factory-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.

VehicleRecord

Modeled

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

FieldAction · Class model


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