TradeIndexDocumentUpsertedPayload trade.index_document.upserted@1
Generated at from
openvibe-contracts v0.34.2 and
openvibe-sdk v0.5.0.
- Version
- 1.0.0
- Owner
- trade
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/events/payloads/trade.index_document.upserted.v1.json
trade.index_document.upserted v1 (OpenVibe.Trade server/domain/indexing.js refresh, via openvibe-publishing/index-hooks indexEvent). The OpenVibe.Search document of an instrument page (/i/<symbol>), the only public indexable object Trade has (watchlists, alert rules and deliveries never reach Search). Sent while the instrument is active and the SEO gate lets the page be listed (financial context is sensitive: the page is hidden until a person-reviewed context is published), whenever the document changed: after a recorded observation, a context publish, review or retraction, an instrument edit, and the worker's refresh pass. The sequencer (trade_index_revisions) gives an unchanged document its old revision and nothing is sent. A page whose newest monetary observation is too old stays as a noindex document (reason stale_price). Title '<symbol> — <name>', language en, facets kind, symbol, exchange; provenance lists Trade's own cited records. Consumed by OpenVibe.Search ('*.index_document.*'). Envelope: subject { type: instrument, id, revision: <document revision> }, visibility internal, priority important, actor service:trade.
Fields
This schema has no named fields.
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: instrument
{
"owner": "trade",
"type": "instrument",
"id": "ins_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"revision": 2,
"deleted": false,
"visibility": "public",
"canonical_url": "https://openvibe.trade/i/ACME",
"title": "ACME — Acme Corporation",
"summary": "Acme Corporation reported its latest recorded close and filings; see the cited observations.",
"body": "Acme Corporation reported its latest recorded close and filings; see the cited observations.\n\nAlso known as: ACME, Acme Corporation",
"facets": {
"kind": "equity",
"symbol": "ACME",
"exchange": "NYSE"
},
"language": "en",
"authorship": "ai_generated",
"provenance": [
{
"service": "trade",
"type": "observation",
"id": "obs_01JAB2C3D4E5F6G7H8J9K0MNPR"
}
],
"publication_state": "published",
"published_at": "2026-09-22T13:00:00.000Z",
"updated_at": "2026-09-22T12:40:00.000Z",
"indexability": {
"decision": "index",
"reasons": []
}
}Rejected: tombstone-as-upsert
{
"owner": "trade",
"type": "instrument",
"id": "ins_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"revision": 3,
"deleted": true
}Rejected: watchlist
{
"owner": "trade",
"type": "watchlist",
"id": "wl_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"revision": 2,
"deleted": false,
"visibility": "public",
"canonical_url": "https://openvibe.trade/i/ACME",
"title": "ACME — Acme Corporation",
"summary": "Acme Corporation reported its latest recorded close and filings; see the cited observations.",
"body": "Acme Corporation reported its latest recorded close and filings; see the cited observations.\n\nAlso known as: ACME, Acme Corporation",
"facets": {
"kind": "equity",
"symbol": "ACME",
"exchange": "NYSE"
},
"language": "en",
"authorship": "ai_generated",
"provenance": [
{
"service": "trade",
"type": "observation",
"id": "obs_01JAB2C3D4E5F6G7H8J9K0MNPR"
}
],
"publication_state": "published",
"published_at": "2026-09-22T13:00:00.000Z",
"updated_at": "2026-09-22T12:40:00.000Z",
"indexability": {
"decision": "index",
"reasons": []
}
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('trade.index_document.upserted@1', value); // { valid, errors: [{ path, message }] }