order
The order noun — identity, lifecycle, events, and every capability as an anchored section: 17 capabilities, 0 live, 17 sandbox, 0 declared.
order is one of the estate's 317 automotive nouns — a job a car needs done. It carries 17 capabilities: 0 live, 17 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | order |
| Pillar | Services (facets: 4 data · 7 services · 6 commerce) |
| Capabilities | 17 — 0 live · 17 sandbox · 0 declared |
| Entities | ServiceOrder |
| Doors | aggregator.vin |
| SDK | Vin.order.* from apis.vin |
| Address | /catalog/order#{action} — the anchor IS the wire name minus order. |
Lifecycle
ServiceOrder — FactoryOrderFSM: 5 states, 5 transitions — Confirmed · Produced · Shipped · Rescheduled · ConstraintHold. Each transition is a past-tense event on the record.
Events
The vocabulary this noun can append to the record — 16 past-tense, versioned event types, each linked to the capability that emits it:
FactoryOrder.constraintHeld@1— emitted bystatusFactoryOrder.rescheduled@1— emitted bystatusOrder.canceled@1— emitted bycancelOrder.checkedOut@1— emitted bycheckoutOrder.completed@1— emitted bycompleteOrder.created@1— emitted bycreateOrder.deposited@1— emitted bydepositOrder.failed@1— emitted bycheckout·deposit·finance·pay·quote·refundOrder.financed@1— emitted byfinanceOrder.fulfilled@1— emitted byfulfillOrder.laterSaved@1— emitted bysaveForLaterOrder.modified@1— emitted bymodifyOrder.paid@1— emitted bypayOrder.quoted@1— emitted byquoteOrder.refunded@1— emitted byrefundOrder.reserved@1— emitted byreserve
Discover & read
read
order.read · GET /orders/read · gate none · sandbox · answers OrderRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKBG5N8535019 (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 { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.read({"vin":"1C4RJKBG5N8535019"})curl 'https://apis.vin/orders/read?vin=1C4RJKBG5N8535019'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": "OrderRead@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"order": {
"id": "ORD-be336f4f",
"dealPosition": "QUOTED",
"status": "quote",
"totalCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"order": {
"id": "ORD-be336f4f",
"dealPosition": "QUOTED",
"status": "quote",
"totalCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}status
order.status · GET /orders/status · gate none · sandbox · answers OrderStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKBG5N8535019 (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 — FactoryOrder.constraintHeld@1 · FactoryOrder.rescheduled@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.status({"vin":"1C4RJKBG5N8535019"})curl 'https://apis.vin/orders/status?vin=1C4RJKBG5N8535019'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": "OrderStatus@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"order": {
"id": "ORD-be336f4f",
"dealPosition": "QUOTED",
"status": "quote",
"totalCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"order": {
"id": "ORD-be336f4f",
"dealPosition": "QUOTED",
"status": "quote",
"totalCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
order.quote · POST /orders/quote · gate offer · sandbox · answers OrderQuote@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) · /1C4RJKBG5N8535019 (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 — Order.failed@1 · Order.quoted@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.quote({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/quote \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderQuote@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"quote": {
"id": "ORD-be336f4f",
"priceCents": 2300000,
"currency": "USD",
"validUntil": "2026-08-17"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"quote": {
"id": "ORD-be336f4f",
"priceCents": 2300000,
"currency": "USD",
"validUntil": "2026-08-17"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}terms
order.terms · GET /orders/terms · gate none · sandbox · answers OrderTerms@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKBG5N8535019 (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 { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.terms({"vin":"1C4RJKBG5N8535019"})curl 'https://apis.vin/orders/terms?vin=1C4RJKBG5N8535019'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": "OrderTerms@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"terms": {
"id": "ORD-be336f4f",
"decision": "approved",
"rateBand": "best",
"termMonths": 60,
"currency": "USD"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"terms": {
"id": "ORD-be336f4f",
"decision": "approved",
"rateBand": "best",
"termMonths": 60,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
reserve
order.reserve · POST /orders/reserve · gate offer · sandbox · answers OrderReserve@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) · /1C4RJKBG5N8535019 (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 — Order.reserved@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.reserve({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/reserve \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderReserve@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"reservation": {
"status": "reserved",
"id": "ORD-be336f4f",
"holdDays": 3,
"expiresOn": "2026-08-13"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"reservation": {
"status": "reserved",
"id": "ORD-be336f4f",
"holdDays": 3,
"expiresOn": "2026-08-13"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}create
order.create · POST /orders/create · gate offer · sandbox · answers OrderCreate@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) · /1C4RJKBG5N8535019 (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 — Order.created@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.create({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/create \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderCreate@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"order": {
"status": "existing-order",
"id": "ORD-be336f4f",
"dealPosition": "QUOTED"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"order": {
"status": "existing-order",
"id": "ORD-be336f4f",
"dealPosition": "QUOTED"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}checkout
order.checkout · POST /orders/checkout · gate offer · sandbox · answers OrderCheckout@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) · /1C4RJKBG5N8535019 (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 — Order.checkedOut@1 · Order.failed@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.checkout({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/checkout \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderCheckout@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"checkout": {
"status": "checkout-opened",
"id": "ORD-be336f4f"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"checkout": {
"status": "checkout-opened",
"id": "ORD-be336f4f"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
order.pay · POST /orders/pay · gate offer · sandbox · answers OrderPay@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) · /1C4RJKBG5N8535019 (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 — Order.failed@1 · Order.paid@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.pay({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/pay \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderPay@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"payment": {
"id": "PAY-eb89f8ad",
"amountCents": 2498250,
"currency": "USD",
"status": "settled"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"payment": {
"id": "PAY-eb89f8ad",
"amountCents": 2498250,
"currency": "USD",
"status": "settled"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}deposit
order.deposit · POST /orders/deposit · gate offer · sandbox · answers OrderDeposit@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) · /1C4RJKBG5N8535019 (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 — Order.deposited@1 · Order.failed@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.deposit({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/deposit \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderDeposit@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"deposit": {
"id": "OD-60550d49",
"amountCents": 50000,
"currency": "USD",
"status": "held",
"refundable": true
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"deposit": {
"id": "OD-60550d49",
"amountCents": 50000,
"currency": "USD",
"status": "held",
"refundable": true
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}finance
order.finance · POST /orders/finance · gate offer · sandbox · answers OrderFinance@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) · /1C4RJKBG5N8535019 (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 — Order.failed@1 · Order.financed@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.finance({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/finance \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderFinance@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"financing": {
"id": "ORD-be336f4f",
"decision": "approved",
"rateBand": "best",
"stipulations": [],
"tier": "super-prime"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"financing": {
"id": "ORD-be336f4f",
"decision": "approved",
"rateBand": "best",
"stipulations": [],
"tier": "super-prime"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}refund
order.refund · POST /orders/refund · gate offer · sandbox · answers OrderRefund@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) · /1C4RJKBG5N8535019 (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 — Order.failed@1 · Order.refunded@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.refund({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/refund \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderRefund@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"refund": {
"id": "RF-35d8a0b3",
"amountCents": 50000,
"currency": "USD",
"status": "refunded"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"refund": {
"id": "RF-35d8a0b3",
"amountCents": 50000,
"currency": "USD",
"status": "refunded"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Fulfill & operate
complete
order.complete · POST /orders/complete · gate offer · sandbox · answers OrderComplete@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) · /1C4RJKBG5N8535019 (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 — Order.completed@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.complete({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/complete \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderComplete@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"completion": {
"status": "not-yet-delivered",
"id": "ORD-be336f4f",
"dealPosition": "QUOTED"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"completion": {
"status": "not-yet-delivered",
"id": "ORD-be336f4f",
"dealPosition": "QUOTED"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Lifecycle & state
cancel
order.cancel · POST /orders/cancel · gate offer · sandbox · answers OrderCancel@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) · /1C4RJKBG5N8535019 (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 — Order.canceled@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.cancel({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/cancel \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderCancel@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"cancellation": {
"status": "cancelled",
"id": "ORD-be336f4f"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"cancellation": {
"status": "cancelled",
"id": "ORD-be336f4f"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
fulfill
order.fulfill · POST /orders/fulfill · gate offer · sandbox · answers OrderFulfill@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) · /1C4RJKBG5N8535019 (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 — Order.fulfilled@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.fulfill({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/fulfill \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderFulfill@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"fulfillment": {
"status": "not-yet-funded",
"id": "ORD-be336f4f",
"dealPosition": "QUOTED"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"fulfillment": {
"status": "not-yet-funded",
"id": "ORD-be336f4f",
"dealPosition": "QUOTED"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}lineItems
order.lineItems · GET /orders/line-items · gate key · sandbox · answers OrderLineItems@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKBG5N8535019 (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 { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.lineItems({"vin":"1C4RJKBG5N8535019"})curl 'https://apis.vin/orders/line-items?vin=1C4RJKBG5N8535019'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": "OrderLineItems@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"lineItems": {
"id": "ORD-be336f4f",
"items": [
{
"kind": "vehicle",
"vin": "1C4RJKBG5N8535019",
"amountCents": 2300000
},
{
"kind": "doc-fee",
"amountCents": 8500
},
{
"kind": "sales-tax",
"amountCents": 189750
}
],
"totalCents": 2498250,
"currency": "USD"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"lineItems": {
"id": "ORD-be336f4f",
"items": [
{
"kind": "vehicle",
"vin": "1C4RJKBG5N8535019",
"amountCents": 2300000
},
{
"kind": "doc-fee",
"amountCents": 8500
},
{
"kind": "sales-tax",
"amountCents": 189750
}
],
"totalCents": 2498250,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}modify
order.modify · POST /orders/modify · gate offer · sandbox · answers OrderModify@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) · /1C4RJKBG5N8535019 (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 — Order.modified@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.modify({"vin":"1C4RJKBG5N8535019"})curl -X POST https://apis.vin/orders/modify \
-H 'content-type: application/json' \
-d '{"vin":"1C4RJKBG5N8535019"}'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": "OrderModify@1",
"value": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"modification": {
"status": "modified",
"id": "ORD-be336f4f"
}
},
"evidence": {
"vin": "1C4RJKBG5N8535019",
"noun": "order",
"asOf": "2026-08-10",
"modification": {
"status": "modified",
"id": "ORD-be336f4f"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}saveForLater
order.saveForLater · POST /orders/save-for-later · gate key · sandbox · answers OrderSaveForLater@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /1C4RJKBG5N8535019 (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 — Order.laterSaved@1.
import { order } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await order.saveForLater()curl -X POST https://apis.vin/orders/save-for-later \
-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": "OrderSaveForLater@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "order",
"asOf": "2026-08-10",
"saved": {
"status": "saved",
"id": "ORD-8e8507ec",
"listId": "SFL-a6f336b3"
}
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "order",
"asOf": "2026-08-10",
"saved": {
"status": "saved",
"id": "ORD-8e8507ec",
"listId": "SFL-a6f336b3"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "paper-commerce-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.
ServiceOrder
Schema
| Property | Type | Notes |
|---|---|---|
id | id | ord_ |
vin | string | — |
service | string | — |
providerId | ref→Provider | — |
location | string | — |
authority | ref→Mandate | — |
status | ServiceFSM | — |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
vehicle | order | 1:0..* | serviced |
order | provider | *:1 | dispatched to |
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
oilChange
The oilChange noun — identity, lifecycle, events, and every capability as an anchored section: 15 capabilities, 0 live, 15 sandbox, 0 declared.
ownership
The ownership noun — identity, lifecycle, events, and every capability as an anchored section: 1 capability, 0 live, 1 sandbox, 0 declared.