> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oddpool.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Response fields

> Every field in the event and entity responses, defined.

The full field dictionary for the [event](/institutions/reference-data/events/lookup) and [entity](/institutions/reference-data/entities/lookup) responses. Each endpoint returns these objects; this page defines every field once.

## Event

The object returned by [Get Oddpool ID by ticker](/institutions/reference-data/events/lookup), [Get a matched event](/institutions/reference-data/events/get), and each item in [List matched events](/institutions/reference-data/events/list).

<ResponseField name="oddpool_id" type="string">
  The event id (`OPI-XXXXXXXX`).
</ResponseField>

<ResponseField name="title" type="string">
  Event display title.
</ResponseField>

<ResponseField name="subject_domain" type="string | null">
  Free-text category, sourced from Kalshi (e.g. `Sports`). Not a closed enum; may be `null` for uncategorized events.
</ResponseField>

<ResponseField name="classified_at" type="string | null">
  ISO 8601 timestamp of the last time the event's canonical state was refreshed. Advances on new outcomes, settlement reclassification, and divergence re-validation, not on price or volume. Use it as the high-water mark for incremental sync via `classified_since`.
</ResponseField>

<ResponseField name="venue_listings" type="EventVenueListing[]">
  The event as each venue lists it, one entry per venue. See [Event venue listing](#event-venue-listing).
</ResponseField>

<ResponseField name="venue_pairs" type="EventVenuePair[]">
  Per-venue-pair settlement classification, one entry per pair of venues that both list the event. See [Event venue pair](#event-venue-pair).
</ResponseField>

<ResponseField name="outcomes" type="Outcome[]">
  Each named answer on the event. See [Outcome](#outcome).
</ResponseField>

## Event venue listing

An entry in the event's `venue_listings`. Names the parent event on one venue.

<ResponseField name="oddpool_id" type="string">Listing id (`OPL:…`).</ResponseField>
<ResponseField name="venue" type="string">`kalshi`, `polymarket`, or `polymarket_us`.</ResponseField>
<ResponseField name="venue_event_id" type="string">The venue's identifier for the parent event.</ResponseField>
<ResponseField name="venue_question" type="string | null">Raw question text from the venue at the time of mapping.</ResponseField>

## Event venue pair

An entry in the event's `venue_pairs`. Fungibility is a property of a venue pair, not a scalar on the event, so an event on N venues has one entry per pair. Venues are precedence-ordered (`kalshi` \< `polymarket` \< `polymarket_us`).

<ResponseField name="venue_a" type="string">First venue in the pair.</ResponseField>
<ResponseField name="venue_a_event_id" type="string">Venue A's event id. Names the exact venue event the pair relates (needed when a canonical event spans several events on one venue; redundant in the common 1:1 case).</ResponseField>
<ResponseField name="venue_b" type="string">Second venue in the pair.</ResponseField>
<ResponseField name="venue_b_event_id" type="string">Venue B's event id.</ResponseField>

<ResponseField name="basis_class" type="string | null">
  The settlement-rule axis: whether the two venues agree on when, by what authority, and under what timing window the event resolves.

  | Value               | Meaning                                                                                                                                                      |
  | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
  | `identical`         | Same resolution anchor, same authority, gap ≤ 24 hours.                                                                                                      |
  | `settlement_window` | Settlement timestamps diverge by more than 24 hours, or the venues anchor on different stages of the resolution chain (e.g. election day vs. certification). |
  | `settlement_source` | Both venues settle on the same nominal value but read it from two different named authorities (e.g. National Weather Service vs. Weather Underground).       |
</ResponseField>

<ResponseField name="outcome_universe" type="string | null">
  The outcome-list correspondence axis: how much the two venues' outcome sets line up.

  | Value       | Meaning                                          |
  | ----------- | ------------------------------------------------ |
  | `identical` | Every outcome paired 1:1 across the two venues.  |
  | `partial`   | Some outcomes paired, at least one is one-sided. |
  | `disjoint`  | No outcomes are paired across the two venues.    |
</ResponseField>

## Outcome

An entry in the event's `outcomes`.

<ResponseField name="oddpool_id" type="string">Outcome id (`OPO:…`).</ResponseField>
<ResponseField name="label" type="string">Display label: an entity name, bucket descriptor, `Yes`, etc.</ResponseField>

<ResponseField name="outcome_kind" type="string">
  The structural type of the outcome.

  | Value                 | Shape                                                 |
  | --------------------- | ----------------------------------------------------- |
  | `binary`              | Single YES/NO proposition.                            |
  | `multi_class_named`   | N named entity outcomes; one wins.                    |
  | `range_bin`           | Continuous variable bucketed into discrete intervals. |
  | `threshold_above`     | Cumulative ladder: above N / ≥ N.                     |
  | `threshold_below`     | Cumulative ladder: below N / ≤ N.                     |
  | `point_mass`          | Exact-value outcome.                                  |
  | `spread`              | Handicap on a line.                                   |
  | `will_happen_by_date` | Time-bound binary with a deadline.                    |
</ResponseField>

<ResponseField name="outcome_params" type="object">
  Type-specific structured parameters. Numeric kinds carry `outcome_params.bucket`; `will_happen_by_date` carries `outcome_params.deadline`; `binary` and `multi_class_named` are `{}`. See [outcome\_params shapes](#outcome-params-shapes). Additional non-load-bearing keys may appear alongside `bucket` / `deadline` (`unmatched_in_counterparty`, `residual`, audit keys). Rely on `bucket` / `deadline` and ignore unknown siblings.
</ResponseField>

<ResponseField name="entity" type="CanonicalEntity | null">
  The canonical entity this outcome refers to, or `null` for non-entity outcomes such as `Tie` or `Other`. See [Entity](#entity).
</ResponseField>

<ResponseField name="venue_listings" type="OutcomeVenueListing[]">
  The tradeable side of this outcome on each venue, the ids you subscribe to. See [Outcome venue listing](#outcome-venue-listing).
</ResponseField>

<ResponseField name="venue_pairs" type="OutcomeVenuePair[]">
  Per-venue-pair fungibility for this outcome, one entry per pair of venues that both list it. See [Outcome venue pair](#outcome-venue-pair).
</ResponseField>

### outcome\_params shapes

```jsonc theme={null}
// range_bin: half-open numeric interval
"outcome_params": { "bucket": { "shape": "discrete_range",
  "lo": 0.0, "hi": 50000.0, "lo_inclusive": true, "hi_inclusive": false, "units": "count" } }

// threshold_above: cumulative ladder, open upper bound
"outcome_params": { "bucket": { "shape": "cumulative_threshold",
  "lo": 25.0, "hi": null, "lo_inclusive": false, "hi_inclusive": null, "units": "bps" } }

// threshold_below: cumulative ladder, open lower bound
"outcome_params": { "bucket": { "shape": "cumulative_below",
  "lo": null, "hi": 0.0, "lo_inclusive": null, "hi_inclusive": false, "units": "count" } }

// point_mass: exact value
"outcome_params": { "bucket": { "shape": "point_value",
  "lo": -25, "hi": -25, "lo_inclusive": true, "hi_inclusive": true, "units": "bps" } }

// spread: handicap on a line; line and side are spread-only
"outcome_params": { "bucket": { "shape": "spread", "line": 1.5, "side": "favorite",
  "lo": 1.5, "hi": null, "lo_inclusive": false, "hi_inclusive": null, "units": "pts" } }

// will_happen_by_date
"outcome_params": { "deadline": { "iso8601": "2027-01-01", "inclusive": false } }

// binary, multi_class_named: no structural params
"outcome_params": { }
```

## Outcome venue listing

An entry in an outcome's `venue_listings`, one venue's tradeable side of the outcome.

<ResponseField name="oddpool_id" type="string">Listing id (`OPL:…`).</ResponseField>
<ResponseField name="venue" type="string">`kalshi`, `polymarket`, or `polymarket_us`.</ResponseField>

<ResponseField name="venue_market_id" type="string">
  The venue's native identifier for this tradeable side, the value you trade on.

  * Kalshi: the market ticker.
  * Polymarket binary YES/NO: the `conditionId`. Trade via the CLOB using `conditionId` plus the side's token below.
  * Polymarket atomic-binary multi-side: `conditionId#<index>`. Split on `#` to recover the native `conditionId`; the side's CLOB token is below.
  * Polymarket US: `<marketSlug>#<YES|NO>`. Split on `#` to recover the order-API `marketSlug` and the side. Polymarket US has no CLOB tokens; orders reference the `marketSlug` and side directly.
</ResponseField>

<ResponseField name="venue_event_id" type="string | null">The venue's identifier for the parent event. Kalshi: event ticker. Polymarket and Polymarket US: the event slug (the human-readable id, not the numeric event id).</ResponseField>
<ResponseField name="venue_yes_token" type="string | null">Polymarket CLOB token id for the YES side. `null` on Kalshi and Polymarket US.</ResponseField>
<ResponseField name="venue_no_token" type="string | null">Polymarket CLOB token id for the NO side. `null` on Kalshi and Polymarket US.</ResponseField>
<ResponseField name="venue_question" type="string | null">Raw question text from the venue at the time of mapping.</ResponseField>

## Outcome venue pair

An entry in an outcome's `venue_pairs`, showing whether the outcome's two venue sides are one tradeable instrument.

<ResponseField name="venue_a" type="string">First venue in the pair.</ResponseField>
<ResponseField name="venue_b" type="string">Second venue in the pair.</ResponseField>

<ResponseField name="fungible" type="boolean">
  `true` iff the event leg's `basis_class == identical` and `divergence_axes == []`. When true, the two listings are one tradeable instrument (same payoff, same nominal value, same authority, same timing) and can be treated as one for quoting, hedging, and risk. The one-glance answer.
</ResponseField>

<ResponseField name="divergence_axes" type="string[]">
  Subset of `{timing, source, condition_scope}`: how the two listings settle differently when they are the same nominal outcome. Empty means no axis-level divergence on this leg.

  | Axis              | Meaning                                                                                                                                                                                                                                                                                                                                                                    |
  | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | `timing`          | Same outcome, fixed at different moments: one on the event itself, the other on a later administrative step (certification, swearing-in). The eventual answer matches, but early-resolution and payout timing can differ.                                                                                                                                                  |
  | `source`          | Same value, read from two different named authorities (e.g. National Weather Service vs. Weather Underground). Agree in the modal case, can diverge on edge measurements.                                                                                                                                                                                                  |
  | `condition_scope` | The most common axis, and usually just the venues' standard cancellation/postponement policy. Still the same outcome: it settles identically in the normal case and differs only on rare edge cases (game cancelled or postponed past a window, a tie), where one venue pays the last-traded price and the other resolves No or 50-50. Common on sports and entertainment. |
</ResponseField>

For how `condition_scope` affects the `fungible` filter, and when to treat it as tradeable with `allow`, see [Fungibility and cancellation risk](/institutions/reference-data/events/list#fungibility-and-cancellation-risk).

<ResponseField name="divergence_reason" type="string | null">
  One-sentence explanation of the specific case, populated when `divergence_axes` is non-empty.
</ResponseField>

## Entity

The object returned by the [entity endpoints](/institutions/reference-data/entities/lookup), and nested under each `outcome.entity`.

<ResponseField name="oddpool_id" type="string">Entity id (`OPE:{KIND}:{slug}`).</ResponseField>

<ResponseField name="kind" type="string">
  One of `person`, `team`, `political_party`, `cultural_work`, `geographic_region`, `organization`, `event_occurrence`.
</ResponseField>

<ResponseField name="canonical_name" type="string">The canonical display name.</ResponseField>
<ResponseField name="aliases" type="string[]">Alternate names observed on venues and curated alternates.</ResponseField>

<ResponseField name="wikidata_qid" type="string | null">
  Wikidata Q-ID, a stable cross-reference to FEC, bioguide, LEI, sports-reference, MusicBrainz, and other identifier systems. `null` for auto-minted entities.
</ResponseField>

<ResponseField name="metadata" type="object">
  Kind-specific structured fields. Shape varies by `kind`. For example, Person: `country`, `party_qid`, `person_kind`; Team: `league`, `sport`, `city`, `parent_qid`; Organization: `country`, `tickers`. Values that reference other entities are Wikidata Q-IDs (`country: "Q30"`). Treat as open JSON: use the keys you recognize, ignore the rest.
</ResponseField>

<ResponseField name="provenance" type="string">
  `wikidata` when the record is sourced from Wikidata; `llm_auto` when auto-minted from venue text because no Wikidata match was available.
</ResponseField>

<ResponseField name="source_synced_at" type="string | null">ISO 8601 timestamp of the most recent Wikidata sync, where applicable.</ResponseField>
