SourceItem sources.item@1
Generated at from
openvibe-contracts v0.33.0 and
openvibe-sdk v0.5.0.
- Version
- 1.0.0
- Owner
- sources
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Decision
- ADR-017
- Schema
https://openvibe.network/contracts/sources/item.v1.json
One thing a source said, with its provenance: source, canonical URL, retrieval time, content hash, raw-body hash, parser version and the terms it was ingested under. A field the source did not state is null — never guessed. Items change only through successful fetches (a new revision per content change) or an explicit, audited removal.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
id | string | yes |
| |
source_key | string | yes |
| |
category | enum | yes |
| |
kind | string | yes | article | url | sitemap | product | offer | review | review_signal | record | coupon … |
|
identity | string | yes | The source's own id (guid, @id, API id) or the canonical URL. |
|
canonical_url | string | null | yes |
| |
title | string | null | yes | ||
summary | string | null | yes | Plain text, capped. Sources keeps metadata and short descriptions, not republishable full text. |
|
authors | array of string | yes | ||
published_at | string | null | yes |
| |
source_updated_at | string | null | yes |
| |
fields | object | yes | Adapter-specific parsed fields (offers, ratings, prices as stated, API extras). | |
revision | integer | yes |
| |
provenance | object | yes |
| |
provenance.retrieved_at | string | yes | Last successful fetch that contained this item (observation time). |
|
provenance.first_seen_at | string | yes |
| |
provenance.content_hash | string | yes |
| |
provenance.raw_body_hash | string | null | yes |
| |
provenance.parser_version | string | yes |
| |
provenance.fetch_run_id | string | null | yes |
| |
provenance.license_note | string | null | yes | ||
provenance.terms_note | string | null | yes | ||
provenance.entered_by | string | null | yes | Principal that entered a manual item. | |
removed | object | null | yes | ||
change_seq | integer |
| ||
revisions | array |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: article
{
"id": "itm_01J0000000000000000000000Z",
"source_key": "nasa-news",
"category": "news",
"kind": "article",
"identity": "https://www.nasa.gov/news-release/example/",
"canonical_url": "https://www.nasa.gov/news-release/example/",
"title": "Example release",
"summary": null,
"authors": [],
"published_at": "2026-09-22T15:00:00Z",
"source_updated_at": null,
"fields": {},
"revision": 1,
"provenance": {
"retrieved_at": "2026-09-23T01:00:00Z",
"first_seen_at": "2026-09-23T01:00:00Z",
"content_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"raw_body_hash": null,
"parser_version": "rss@1",
"fetch_run_id": "frn_01J0000000000000000000000Z",
"license_note": null,
"terms_note": "US government work",
"entered_by": null
},
"removed": null
}Rejected: no-provenance
{
"id": "itm_01J0000000000000000000000Z",
"source_key": "nasa-news",
"category": "news",
"kind": "article",
"identity": "x",
"canonical_url": null,
"title": null,
"summary": null,
"authors": [],
"published_at": null,
"source_updated_at": null,
"fields": {},
"revision": 1,
"removed": null
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('sources.item@1', value); // { valid, errors: [{ path, message }] }