docs.vin

review

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

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

Identity

Nounreview
PillarServices (facets: 4 data · 6 services)
Capabilities10 — 0 live · 10 sandbox · 0 declared
EntitiesDealer
Doorsaggregator.vin
SDKVin.review.* from apis.vin
Address/catalog/review#{action} — the anchor IS the wire name minus review.

Events

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

Quote & price

moderate

review.moderate · POST /reviews/moderate · gate key · sandbox · answers ReviewModerate@1

No input — this capability takes no request body.

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

EmitsReview.moderated@1.

the SDK — review.moderate
import { review } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await review.moderate()
POST /reviews/moderate
curl -X POST https://apis.vin/reviews/moderate \
  -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-17T00:18:27.802Z · HTTP 200
{
  "type": "OK",
  "answers": "ReviewModerate@1",
  "value": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "moderation": {
      "reviewId": "RV-87cfadc5",
      "status": "approved",
      "basis": "content-guidelines"
    }
  },
  "evidence": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "moderation": {
      "reviewId": "RV-87cfadc5",
      "status": "approved",
      "basis": "content-guidelines"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "marketing-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

collect

review.collect · GET /reviews/collect · gate none · sandbox · answers ReviewCollect@1

No input — this capability takes no request body.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await review.collect()
GET /reviews/collect
curl 'https://apis.vin/reviews/collect'

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-17T00:18:27.799Z · HTTP 200
{
  "type": "OK",
  "answers": "ReviewCollect@1",
  "value": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "collection": {
      "status": "collection-recorded",
      "invited": 11,
      "onFile": 100
    }
  },
  "evidence": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "collection": {
      "status": "collection-recorded",
      "invited": 11,
      "onFile": 100
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "marketing-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

publish

review.publish · POST /reviews/publish · gate key · sandbox · answers ReviewPublish@1

No input — this capability takes no request body.

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

EmitsReview.published@1.

the SDK — review.publish
import { review } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await review.publish()
POST /reviews/publish
curl -X POST https://apis.vin/reviews/publish \
  -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-17T00:18:27.803Z · HTTP 200
{
  "type": "OK",
  "answers": "ReviewPublish@1",
  "value": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "publication": {
      "reviewId": "RV-87cfadc5",
      "status": "published",
      "store": "The Estate Store"
    }
  },
  "evidence": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "publication": {
      "reviewId": "RV-87cfadc5",
      "status": "published",
      "store": "The Estate Store"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "marketing-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Authorize & resolve

dispute

review.dispute · POST /reviews/dispute · gate key · sandbox · answers ReviewDispute@1

No input — this capability takes no request body.

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

EmitsReview.disputed@1.

the SDK — review.dispute
import { review } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await review.dispute()
POST /reviews/dispute
curl -X POST https://apis.vin/reviews/dispute \
  -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-17T00:18:27.801Z · HTTP 200
{
  "type": "OK",
  "answers": "ReviewDispute@1",
  "value": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "dispute": {
      "reviewId": "RV-87cfadc5",
      "status": "dispute-recorded",
      "resolution": "referred-to-platform"
    }
  },
  "evidence": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "dispute": {
      "reviewId": "RV-87cfadc5",
      "status": "dispute-recorded",
      "resolution": "referred-to-platform"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "marketing-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

aggregate

review.aggregate · GET /reviews/aggregate · gate none · sandbox · answers ReviewAggregate@1

No input — this capability takes no request body.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await review.aggregate()
GET /reviews/aggregate
curl 'https://apis.vin/reviews/aggregate'

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-17T00:18:27.799Z · HTTP 200
{
  "type": "OK",
  "answers": "ReviewAggregate@1",
  "value": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "rating": {
      "ratingTenths": 46,
      "outOfTenths": 50,
      "reviews": 100
    }
  },
  "evidence": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "rating": {
      "ratingTenths": 46,
      "outOfTenths": 50,
      "reviews": 100
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "marketing-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

editorial

review.editorial · GET /reviews/editorial · gate none · sandbox · answers ReviewEditorial@1

No input — this capability takes no request body.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await review.editorial()
GET /reviews/editorial
curl 'https://apis.vin/reviews/editorial'

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-17T00:18:27.802Z · HTTP 200
{
  "type": "OK",
  "answers": "ReviewEditorial@1",
  "value": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "editorial": {
      "standing": "recommended",
      "ratingTenths": 46,
      "outOfTenths": 50,
      "basis": "aggregate-rating"
    }
  },
  "evidence": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "editorial": {
      "standing": "recommended",
      "ratingTenths": 46,
      "outOfTenths": 50,
      "basis": "aggregate-rating"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "marketing-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

ownerRating

review.ownerRating · GET /reviews/owner-rating · gate none · sandbox · answers ReviewOwnerRating@1

No input — this capability takes no request body.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await review.ownerRating()
GET /reviews/owner-rating
curl 'https://apis.vin/reviews/owner-rating'

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-17T00:18:27.803Z · HTTP 200
{
  "type": "OK",
  "answers": "ReviewOwnerRating@1",
  "value": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "ownerRating": {
      "ratingTenths": 46,
      "outOfTenths": 50,
      "reviews": 100,
      "basis": "verified-owners"
    }
  },
  "evidence": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "ownerRating": {
      "ratingTenths": 46,
      "outOfTenths": 50,
      "reviews": 100,
      "basis": "verified-owners"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "marketing-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

respond

review.respond · POST /reviews/respond · gate key · sandbox · answers ReviewRespond@1

No input — this capability takes no request body.

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

EmitsReview.responded@1.

the SDK — review.respond
import { review } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await review.respond()
POST /reviews/respond
curl -X POST https://apis.vin/reviews/respond \
  -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-17T00:18:27.803Z · HTTP 200
{
  "type": "OK",
  "answers": "ReviewRespond@1",
  "value": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "response": {
      "id": "RR-da261d38",
      "reviewId": "RV-87cfadc5",
      "status": "responded",
      "respondedOn": "2026-08-10"
    }
  },
  "evidence": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "response": {
      "id": "RR-da261d38",
      "reviewId": "RV-87cfadc5",
      "status": "responded",
      "respondedOn": "2026-08-10"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "marketing-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

solicit

review.solicit · POST /reviews/solicit · gate key · sandbox · answers ReviewSolicit@1

No input — this capability takes no request body.

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

EmitsReview.solicited@1.

the SDK — review.solicit
import { review } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await review.solicit()
POST /reviews/solicit
curl -X POST https://apis.vin/reviews/solicit \
  -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-17T00:18:27.803Z · HTTP 200
{
  "type": "OK",
  "answers": "ReviewSolicit@1",
  "value": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "solicitation": {
      "status": "solicitation-sent",
      "threadId": "TH-31e306be",
      "to": {
        "identityId": "ID-11f17424",
        "name": "Ava Good"
      }
    }
  },
  "evidence": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "solicitation": {
      "status": "solicitation-sent",
      "threadId": "TH-31e306be",
      "to": {
        "identityId": "ID-11f17424",
        "name": "Ava Good"
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "marketing-desk-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

syndicate

review.syndicate · POST /reviews/syndicate · gate key · sandbox · answers ReviewSyndicate@1

No input — this capability takes no request body.

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

EmitsReview.syndicated@1.

the SDK — review.syndicate
import { review } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await review.syndicate()
POST /reviews/syndicate
curl -X POST https://apis.vin/reviews/syndicate \
  -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-17T00:18:27.809Z · HTTP 200
{
  "type": "OK",
  "answers": "ReviewSyndicate@1",
  "value": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "syndication": {
      "feedId": "RF-7bddf297",
      "status": "syndicated",
      "rating": {
        "ratingTenths": 46,
        "outOfTenths": 50,
        "reviews": 100
      }
    }
  },
  "evidence": {
    "noun": "review",
    "asOf": "2026-08-10",
    "dealerId": "DLR-b9066ade",
    "rooftopIds": [
      "DLR-b9066ade"
    ],
    "dealerLicense": "DL-7bcdd2ef",
    "auctionStanding": "active",
    "syndication": {
      "feedId": "RF-7bddf297",
      "status": "syndicated",
      "rating": {
        "ratingTenths": 46,
        "outOfTenths": 50,
        "reviews": 100
      }
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "marketing-desk-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.

Dealer

Modeled

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

Review · Class model

Review · State machine


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