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 }] }