ReviewsItem reviews.item@1
Generated at from
openvibe-contracts v0.53.0 and
openvibe-sdk v0.11.0.
- Version
- 1.0.0
- Owner
- reviews
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/reviews/item.v1.json
reviews.item@1: one OpenVibe.Sources item as OpenVibe.Reviews read it (server/reviews/service.js itemView): only the signal fields and provenance (never review text), its state upstream, and how it was resolved to an entity (resolved by a rule or an editor, ambiguous with candidates, unmatched, or ignored), with its active signal.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
id | string | yes |
| |
source_key | string | yes | ||
kind | string | yes | ||
identity | string | yes | ||
canonical_url | string | null | yes | ||
title | string | null | yes | ||
item_revision | integer | yes |
| |
published_at | string | null | yes | ||
retrieved_at | string | yes | ||
license_note | string | null | yes | ||
terms_note | string | null | yes | ||
fields | object | yes | The fields Reviews keeps from the item (identifiers and signal values). | |
state | enum | yes |
| |
removed_at | string | null | yes | ||
removed_reason | string | null | yes | ||
resolution | enum | yes |
| |
entity_id | string | null | yes | ||
resolution_rule | string | null | yes | source, url, gtin, sku, mpn, external (joined with + when several agree), conflicting_identifiers, name_only or editor. | |
candidates | array of object | yes | ||
candidates[].entity_id | string | yes | ||
candidates[].rule | string | yes | ||
candidates[].entity | one of | yes | ||
signal_note | string | null | yes | Why the item does or does not state a signal. | |
signal | object | null | yes | The item's active signal, or null. |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: ambiguous
{
"id": "itm_01JAC3T4V5W6X7Y8Z9A0B1C2D3",
"source_key": "sound-lab",
"kind": "review_signal",
"identity": "https://soundlab.example/lumen-x2",
"canonical_url": "https://soundlab.example/lumen-x2",
"title": "Lumen X2",
"item_revision": 2,
"published_at": "2026-09-20",
"retrieved_at": "2026-09-24T08:15:00.000Z",
"license_note": null,
"terms_note": "Ratings may be shown with a link",
"fields": {
"gtin": "0012345678905",
"rating": {
"value": 4.2,
"best": 5,
"count": 318
}
},
"state": "active",
"removed_at": null,
"removed_reason": null,
"resolution": "ambiguous",
"entity_id": null,
"resolution_rule": "name_only",
"candidates": [
{
"entity_id": "ent_01JAC1E2N3T4V5W6X7Y8Z9A0B1",
"rule": "name",
"entity": {
"id": "ent_01JAC1E2N3T4V5W6X7Y8Z9A0B1",
"slug": "lumen-x2-headphones",
"name": "Lumen X2 Headphones",
"kind": "product",
"description": null,
"state": "active",
"merged_into": null,
"canonical_id": "ent_01JAC1E2N3T4V5W6X7Y8Z9A0B1",
"noindex": false,
"url": "https://openvibe.reviews/e/lumen-x2-headphones",
"created_at": "2026-09-24T08:15:00.000Z",
"updated_at": "2026-09-24T09:40:12.000Z"
}
}
],
"signal_note": null,
"signal": null
}Valid: resolved
{
"id": "itm_01JAC3T4V5W6X7Y8Z9A0B1C2D3",
"source_key": "sound-lab",
"kind": "review_signal",
"identity": "https://soundlab.example/lumen-x2",
"canonical_url": "https://soundlab.example/lumen-x2",
"title": "Lumen X2",
"item_revision": 2,
"published_at": "2026-09-20",
"retrieved_at": "2026-09-24T08:15:00.000Z",
"license_note": null,
"terms_note": "Ratings may be shown with a link",
"fields": {
"gtin": "0012345678905",
"rating": {
"value": 4.2,
"best": 5,
"count": 318
}
},
"state": "active",
"removed_at": null,
"removed_reason": null,
"resolution": "resolved",
"entity_id": "ent_01JAC1E2N3T4V5W6X7Y8Z9A0B1",
"resolution_rule": "gtin",
"candidates": [],
"signal_note": null,
"signal": {
"signal_id": "sig_01JAC2S3G4H5J6K7M8N9P0Q1R2",
"entity_id": "ent_01JAC1E2N3T4V5W6X7Y8Z9A0B1",
"canonical_entity_id": "ent_01JAC1E2N3T4V5W6X7Y8Z9A0B1",
"type": "rating_aggregate",
"source_key": "sound-lab",
"source_item_id": "itm_01JAC3T4V5W6X7Y8Z9A0B1C2D3",
"item_revision": 2,
"observed_at": "2026-09-24T08:15:00.000Z",
"source_published_at": "2026-09-20",
"canonical_url": "https://soundlab.example/lumen-x2",
"license_note": null,
"rating_value": 4.2,
"rating_best": 5,
"rating_worst": 1,
"rating_count": 318
}
}Rejected: bad-resolution
{
"id": "itm_01JAC3T4V5W6X7Y8Z9A0B1C2D3",
"source_key": "sound-lab",
"kind": "review_signal",
"identity": "https://soundlab.example/lumen-x2",
"canonical_url": "https://soundlab.example/lumen-x2",
"title": "Lumen X2",
"item_revision": 2,
"published_at": "2026-09-20",
"retrieved_at": "2026-09-24T08:15:00.000Z",
"license_note": null,
"terms_note": "Ratings may be shown with a link",
"fields": {
"gtin": "0012345678905",
"rating": {
"value": 4.2,
"best": 5,
"count": 318
}
},
"state": "active",
"removed_at": null,
"removed_reason": null,
"resolution": "guessed",
"entity_id": "ent_01JAC1E2N3T4V5W6X7Y8Z9A0B1",
"resolution_rule": "gtin",
"candidates": [],
"signal_note": null,
"signal": {
"signal_id": "sig_01JAC2S3G4H5J6K7M8N9P0Q1R2",
"entity_id": "ent_01JAC1E2N3T4V5W6X7Y8Z9A0B1",
"canonical_entity_id": "ent_01JAC1E2N3T4V5W6X7Y8Z9A0B1",
"type": "rating_aggregate",
"source_key": "sound-lab",
"source_item_id": "itm_01JAC3T4V5W6X7Y8Z9A0B1C2D3",
"item_revision": 2,
"observed_at": "2026-09-24T08:15:00.000Z",
"source_published_at": "2026-09-20",
"canonical_url": "https://soundlab.example/lumen-x2",
"license_note": null,
"rating_value": 4.2,
"rating_best": 5,
"rating_worst": 1,
"rating_count": 318
}
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('reviews.item@1', value); // { valid, errors: [{ path, message }] }