Source sources.source@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/source.v1.json
A registered source (roadmap §4.2 B, Wave 14): where it is fetched from and on what terms. Credentials are referenced by environment-variable NAME only. A source's existence is never permission to fetch: robots and terms are verified before it is enabled, and the fetcher re-checks robots.txt on every run.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
key | string | yes |
| |
name | string | yes |
| |
type | enum | yes |
| |
category | enum | yes |
| |
homepage_url | string | null |
| ||
endpoints | array of object | yes |
| |
endpoints[].url | string | yes |
| |
endpoints[].format | enum |
| ||
endpoints[].items_path | string | |||
endpoints[].item_kind | string |
| ||
endpoints[].fields | object | |||
endpoints[].extra | object | |||
auth | object | yes |
| |
auth.mode | enum | yes |
| |
auth.env | string | Name of the environment variable holding the credential. Never a value. |
| |
auth.header | string |
| ||
auth.param | string |
| ||
robots_note | string | null |
| ||
terms_note | string | null |
| ||
license_note | string | null |
| ||
min_interval_ms | integer | yes | Rate limit: the least time between two requests to this source (the per-host floor and robots Crawl-delay may raise it). |
|
poll_interval_sec | integer | yes |
| |
stale_after_sec | integer | yes |
| |
max_items | integer | yes |
| |
enabled | boolean | yes | ||
review_required | boolean | yes | Products must review what they derive from this source before it can be indexable. | |
sensitivity | enum | yes |
| |
default_indexability | enum | yes | What a product's indexability gate starts from for content derived from this source. |
|
search_visibility | enum | members = raw items are indexed in OpenVibe.Search for staff only (never indexable). |
| |
health | object |
| ||
health.status | enum |
| ||
health.stale | boolean | |||
health.last_success_at | string | null |
| ||
health.last_run_at | string | null |
| ||
health.last_state | string | null | |||
health.consecutive_failures | integer |
| ||
health.next_due_at | string | null |
| ||
health.stale_after_sec | integer | |||
created_at | string |
| ||
updated_at | string |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: rss
{
"key": "nasa-news",
"name": "NASA news releases",
"type": "rss",
"category": "news",
"homepage_url": "https://www.nasa.gov/",
"endpoints": [
{
"url": "https://www.nasa.gov/news-release/feed/"
}
],
"auth": {
"mode": "none"
},
"robots_note": "robots.txt allows the feed path (checked 2026-09-23)",
"terms_note": "US government work; verify before enabling",
"license_note": null,
"min_interval_ms": 60000,
"poll_interval_sec": 3600,
"stale_after_sec": 172800,
"max_items": 200,
"enabled": false,
"review_required": true,
"sensitivity": "none",
"default_indexability": "noindex"
}Rejected: secret-in-auth
{
"key": "x-api",
"name": "X",
"type": "api",
"category": "deals",
"endpoints": [
{
"url": "https://example.com/api"
}
],
"auth": {
"mode": "bearer",
"env": "DATABASE_PASSWORD"
},
"min_interval_ms": 1000,
"poll_interval_sec": 60,
"stale_after_sec": 600,
"max_items": 10,
"enabled": false,
"review_required": false,
"sensitivity": "none",
"default_indexability": "noindex"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('sources.source@1', value); // { valid, errors: [{ path, message }] }