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
| Noun | fieldAction |
| Pillar | Data (facets: 6 data · 6 services · 2 commerce) |
| Capabilities | 14 — 0 live · 14 sandbox · 0 declared |
| Entities | VehicleRecord |
| Doors | aggregator.vin |
| SDK | Vin.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:
FieldAction.claimFailed@1— emitted byclaimFieldAction.claimRequested@1— emitted byclaimFieldAction.claimed@1— emitted byclaimFieldAction.clearRequested@1— emitted byclearFieldAction.cleared@1— emitted byclearFieldAction.flagRequested@1— emitted byflagFieldAction.flagged@1— emitted byflagFieldAction.holdInventoried@1— emitted byholdInventoryFieldAction.holdInventoryRequested@1— emitted byholdInventoryFieldAction.inventoryHeld@1— emitted byholdInventoryFieldAction.reimburseRequested@1— emitted byreimburseFieldAction.reimbursed@1— emitted byreimburseFieldAction.releaseFailed@1— emitted byreleaseFieldAction.releaseRequested@1— emitted byreleaseFieldAction.released@1— emitted byreleaseFieldAction.remedied@1— emitted byremedyFieldAction.remedyRequested@1— emitted byremedyFieldAction.stopSaleIssued@1— emitted bystopSaleFieldAction.subscribed@1— emitted bysubscribe
Discover & read
lookup
fieldAction.lookup · GET /field-actions/lookup · gate none · sandbox · answers FieldActionLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.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.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.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.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.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.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.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.
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"})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.
{
"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.
Door — aggregator.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.
Emits — FieldAction.subscribed@1.
import { fieldAction } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await fieldAction.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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /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.
Emits — FieldAction.reimburseRequested@1 · FieldAction.reimbursed@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /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.
Emits — FieldAction.claimFailed@1 · FieldAction.claimRequested@1 · FieldAction.claimed@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /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.
Emits — FieldAction.clearRequested@1 · FieldAction.cleared@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /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.
Emits — FieldAction.flagRequested@1 · FieldAction.flagged@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /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.
Emits — FieldAction.releaseFailed@1 · FieldAction.releaseRequested@1 · FieldAction.released@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.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.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /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.
Emits — FieldAction.holdInventoried@1 · FieldAction.holdInventoryRequested@1 · FieldAction.inventoryHeld@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /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.
Emits — FieldAction.remedied@1 · FieldAction.remedyRequested@1.
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"})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.
{
"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
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /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.
Emits — FieldAction.stopSaleIssued@1.
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"})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.
{
"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.
feeSchedule
The feeSchedule noun — identity, lifecycle, events, and every capability as an anchored section: 6 capabilities, 2 live, 4 sandbox, 0 declared.
filters
The filters noun — identity, lifecycle, events, and every capability as an anchored section: 10 capabilities, 0 live, 10 sandbox, 0 declared.