Documentation · Schema

Event record schema

Every Vera record is an event, the markets it relates to, and the interpretation of that relationship. Field-by-field below, with the explicit definitions for the interpretive fields.


The full shape

event recordjson
{
  0: {
    1: 2,
    3: {
      4: 5,
      6: 7,
      8: 9,
      10: 11
    },
    12: 13,
    14: 15,
    16: 17,
    18: {
      19: 20,
      21: {
        22: [23, 24, 25],
        26: 27
      },
      28: 29
    }
  },
  30: [
    {
      31: 32,
      33: 34,
      35: 36,
      37: {
        38: { 39: 40, 41: 42 },
        43:  { 44: 45,  46: 47 }
      },
      48: {
        49: 50,
        51: 52,
        53: 54,
        55: {
          56: 57,
          58: {
            59: [60, 61, 62],
            63: 64
          },
          65: 66
        },
        67: 68
      },
      69: {
        70: 0.62,
        71: 0.39,
        72: 73,
        74: 75,
        76: 142351.20,
        77: 4821550.00,
        78: 4,
        79: 9,
        80: 81
      },
      82: {
        83: true,
        84: 1.8,
        85: 86,
        87: 88,
        89: 90
      },
      91: 92
    }
  ],
  93: {
    94: 95,
    96: 97,
    98: 99,
    100: true,
    101: true,
    102: 103
  }
}

Top-level fields

FieldTypeNotes
eventobjectThe underlying news event. See below.
related_marketsarrayZero or more prediction markets the event relates to. Empty array if no relevant markets were identified at ingestion time.
metaobjectPer-record metadata. Always includes the compliance flags not_investment_advice and not_trading_signal, both true.

The event block

FieldTypeNotes
event.idstringStable, opaque identifier. Begins with evt_. Idempotent: the same source event always returns the same id.
event.source.publicationstringPublication name (e.g. Reuters, Bloomberg, @user for tweet sources).
event.source.urlstringCanonical URL of the source.
event.source.published_atstring (ISO 8601)Publication time at source, in UTC.
event.source.credibility_tierstringOne of t1 (top-tier institutional), t2 (established secondary), t3 (informal).
event.headlinestringThe event headline, lightly normalised.
event.summarystringOptional one-paragraph extract for context. May be empty.
event.ingested_atstring (ISO 8601)When Vera ingested the event. Subtract event.source.published_at to measure source → /v1/events latency yourself, the same measurement we use internally.
event.aggregate_event_relevanceobjectA low / moderate / high level for the event's estimated relevance to related markets. See below.

The interpretive fields

Two fields in the schema are interpretive: aggregate_event_relevance at the event level and news_effect.relevance_score at the per-market level. Both carry their own definition field stating what they are and, explicitly, what they are not. The text in these fields is part of the public schema; we do not change it without a versioning event.

Estimated relationship strength between the event and the referenced market outcome. This is not a probability, expected return, confidence level, or trading signal.

The values are simple levels (low, moderate, high) rather than numeric scores, by design. The product is interpretive, not quantitative. Levels keep you from reading too much into a 0.7-vs-0.8 score that doesn't exist, and leave the precise weighting to you.

The news_effect block

FieldTypeNotes
news_effect.affected_outcomestringYES or NO: which outcome the event appears to bear on.
news_effect.effectstringsupports or counters. Supports means the event appears consistent with the referenced outcome being realised; counters means the opposite. Never a buy/sell direction.
news_effect.relationship_typestringAlways interpretive in v1. Future values may include derivative, direct, etc.
news_effect.relevance_scoreobjectA low / moderate / high level for how strongly the event relates to this specific market. Carries the "not a trading signal" definition.
news_effect.rationalestringNatural-language sentence. Phrasing convention: "Markets appear to interpret X as supportive of YES because…". Never "You should…" or "This means…".

The market_snapshot block

A snapshot of the market at the moment the event was processed, included for reference and mapping only. The note field says so explicitly. Do not treat it as a live price feed; the WebSocket is the live feed.

FieldTypeNotes
yes_ask / no_asknumber | nullBest ask on each side at processing time, as an implied probability (0–1). Asks only; v1 does not return bids or a last-trade price. null means no usable price was found; don't derive it from the opposite side.
yes_ask_source / no_ask_sourcestring | nullHow each side resolved: ask (CLOB orderbook), ws (price-stream tick), or null (no price found).
volume_24hnumber | nullTrailing 24-hour traded volume, in USD.
total_volumenumber | nullAll-time traded volume, in USD.
yes_tick_age_seconds / no_tick_age_secondsinteger | nullSeconds since the most recent price tick on each side, computed at serve time, so you can judge how fresh the snapshot is right now.

The momentum tag

Each related market may carry a momentum object, the field most consumers filter on. It flags whether the related market visibly movedaround the event, inside our latency window, by more than this category's threshold, marking a higher signal-to-noise subset of the feed. It is explicitly descriptive, not predictive: it says the market reacted, not that any position would profit.

FieldTypeNotes
momentum.passedbooleantrue if the related market moved past this category's gate threshold within our window.
momentum.pre_move_ppnumber | nullThe signed move, in percentage points of implied probability, between event time and processing time.
momentum.criteriastring | nullThe literal rule evaluated, e.g. ANY |+1.8pp| >= 0.5.
momentum.configstring | nullThe gate config version that produced the verdict (e.g. v4).

The whole momentum object is null until the gate logs the event (about a minute after publish), or when no live price existed at event time. To consume only the tagged subset, filter on momentum.passed. What it is not: not a probability, not an expected return, not an accuracy or win-rate claim, not a trading signal. Net of the bid/ask spread the tagged subset is not, in itself, a profitable strategy. It is a signal-to-noise filter for your own analysis.

Known limitations at v1 launch

A few field-level and record-level limitations exist on the v1 payload that you should design around. This section captures the user-visible shape.

LimitationWhat you may seeWorking around it
Cross-source duplicatesTwo event records on the same market within ~30 minutes when two outlets publish the same story. Roughly 6% of responses today, down from ~24% before our dedup gate shipped; enforcement is still ramping.Group on (related_markets[].market_id, news_effect.affected_outcome, news_effect.effect, news_effect.relevance_score.bucket) within a sliding 30-minute window. Dedup enforcement lands without a schema change.
market_snapshot.no_tick_age_secondsMay be null on some records. YES-side counterpart is populated.Fall back to yes_tick_age_seconds for staleness checks until the NO-side write-path catches up.
market_snapshot.total_volumeMay be null on some sub-market entries during the backfill.Treat null as "unknown", not zero. Backfill is in flight.
Cross-topic edge cases in news_effectOccasional false-positive market matches (e.g., a transport-sector headline pairing to a commodity-price market). Tracked, low frequency.Treat relevance_score.bucket=low with healthy scepticism; a future scope-tighten will reduce these.

Versioning

Schema version is reported at meta.schema_version. Breaking changes ship under a new URL prefix (/v2/); non-breaking additions ship in-place. Additive changes you should expect to see ship without a major bump: new optional fields on existing objects, new credibility tiers, new venue identifiers.

What Vera is not

Repeating from Overview because it bears repeating in the same place a developer reads the schema for the first time: the output is informational and interpretive. It is not investment advice, not a trading signal, and not a recommendation. The interpretive fields are simple low / moderate / high levels and carry self-documenting definitions stating as much. Build accordingly.