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

FieldTypeRequiredDescriptionConstraints
idstringyes
  • pattern ^itm_[0-9A-HJKMNP-TV-Z]{26}$
source_keystringyes
kindstringyes
identitystringyes
canonical_urlstring | nullyes
titlestring | nullyes
item_revisionintegeryes
  • minimum 1
published_atstring | nullyes
retrieved_atstringyes
license_notestring | nullyes
terms_notestring | nullyes
fieldsobjectyesThe fields Reviews keeps from the item (identifiers and signal values).
stateenumyes
  • one of "active", "removed"
removed_atstring | nullyes
removed_reasonstring | nullyes
resolutionenumyes
  • one of "resolved", "ambiguous", "unmatched", "ignored"
entity_idstring | nullyes
resolution_rulestring | nullyessource, url, gtin, sku, mpn, external (joined with + when several agree), conflicting_identifiers, name_only or editor.
candidatesarray of objectyes
candidates[].entity_idstringyes
candidates[].rulestringyes
candidates[].entityone ofyes
signal_notestring | nullyesWhy the item does or does not state a signal.
signalobject | nullyesThe 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 }] }