---
title: "Get Generic Asset"
method: GET
path: "/v1/generic-assets/{generic_asset_id}"
tags: ["generic-assets"]
---

# Get Generic Asset

`GET /v1/generic-assets/{generic_asset_id}`

## Request

- Base URL: `https://api.rivermarkets.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.rivermarkets.com/v1/generic-assets/{generic_asset_id}`
- Auth: none declared

Fetch a single approved generic asset with its resolved member markets.

## Path parameters

- `generic_asset_id` string, uuid, required

## Response `200`

Successful Response

- GenericAssetDetailResponse: Response schema for a generic asset with its resolved members (detail view).
  - `asset_type` string, nullable: moneyline | spread | threshold | distance | btts
  - `period` string, nullable: NULL = full game; h1, q1, f5_innings, inning_1, ...
  - `metric` string, nullable: runs | points for thresholds
  - `entity_id` string, nullable: The entity the YES is about: the first participant for a two-outcome moneyline or a spread, the leg's own side where a tie is listed as its own contract, the team for team totals
  - `side` string, nullable: over for thresholds
  - `strike` number, nullable: First participant's line for spreads, over line for totals
  - `generic_asset_id` string, uuid, required
  - `name` string, required
  - `description` string, nullable
  - `category` string, nullable
  - `subcategory` string, nullable
  - `resolves_at` string, nullable
  - `start_datetime` string, nullable
  - `status` string, nullable
  - `match_type` string, nullable
  - `members` MarketSearchResult[], required
    - `river_id` integer, required
    - `exchange_value` integer, required
    - `exchange_name` string, required
    - `ticker` string, nullable
    - `token_id_yes` string, nullable
    - `token_id_no` string, nullable
    - `slug` string, nullable
    - `tick_size_price` number, required
    - `tick_size_qty` number, required
    - `tick_structure` string
    - `minimum_order_size` number, required
    - `expiration_datetime` string, nullable: Market expiration datetime (UTC)
    - `start_datetime` string, nullable: Game/event start datetime (UTC). Populated for sports; null otherwise.
    - `open_datetime` string, nullable: When the exchange opened the market for trading (UTC).
    - `neg_risk` boolean, required
    - `neg_risk_id` string, nullable
    - `condition_id` string, nullable
    - `name` string, required
    - `subtitle` string, nullable
    - `description` string, nullable
    - `status` 'active' | 'closed' | 'inactive', required: Instrument status derived in instruments table from exchange-specific fields. Kalshi: maps from kalshi_markets.status - 'active' -> ACTIVE - everything else (closed, determined, finalized, settled, amended, inactive, initialized) -> CLOSED Polymarket: maps from polymarket_markets.closed and polymarket_markets.active booleans - closed=true -> CLOSED - active=true (and not closed) -> ACTIVE - else (active=false, closed=false) -> INACTIVE
    - `category` string
    - `subcategory` string, nullable
    - `rank` number, nullable
    - `event_ticker` string, nullable
    - `event_title` string, nullable
    - `event_subtitle` string, nullable
    - `is_combo` boolean: True for parlays.
    - `flip` boolean, nullable: Generic-asset members only: true when this member's YES side is the opposite of the asset's outcome. NULL outside basket-member contexts.
    - `volume` integer, nullable
    - `volume_24h` integer, nullable
    - `series_ticker` string, nullable
    - `image` string, nullable
    - `last_price` number, nullable: Most recent YES price normalized to 0.0–1.0 (probability). Kalshi cents / 100; Polymarket already 0.0–1.0. NULL when no trade has been observed.
    - `primary_entity_name` string, nullable: Resolved display name of the canonical structured-target entity (player, team, competitor, …) referenced by the market. NULL for markets without a structured target. Kalshi only — Polymarket has no equivalent concept.
    - `event_market_count` integer, nullable: Total number of markets in this row's event. Only populated on the event-paginated path; when markets_per_event trims an event, this is how clients know more markets exist than were returned.
  - `inserted_at` string, required: Creation timestamp (UTC)
  - `event` GenericEventResponse: The generic event (normalization.events) an auto-matched asset settles on.
    - `event_id` string, required
    - `series` string, nullable: League / series name, e.g. NFL
    - `start` string, nullable: Event start (UTC)
    - `title` string, nullable: 'AWAY @ HOME' for games, with (G2) for doubleheaders; 'A vs B' where there is no home side
    - `participants` GenericEventParticipant[]: Away first then home for games; name order otherwise
      - `entity` GenericEntity, required: Whatever an asset or event is about: a team, or a player in an individual sport.
        - `entity_id` string, required
        - `name` string, required: Display name, e.g. 'Seattle Seahawks' or 'Carlos Alcaraz'
        - `abbreviation` string, nullable: Short code for a team ('SEA'), last name for a person ('Alcaraz')
      - `role` string, nullable: 'home' | 'away' for two-sided games, NULL otherwise

## Other responses

- `422`: Validation Error

## Changes

- **2026-11-03** `3732aea08430`: 1 warning, 1 info
  - removed the optional property `owner_subaccount_id` from the response with the `200` status
  - added the optional property `members/items/open_datetime` to the response with the `200` status
- **2026-10-07** `7fb1b5dd2cae`: 1 breaking
  - the `resolves_at/anyOf[subschema #1]/` response's property format changed from `date-time` to no format for status `200`
- **2026-09-24** `5e27be09032e`: 1 info
  - added the optional property `members/items/event_subtitle` to the response with the `200` status
- **2026-09-07** `c00f69e212f5`: 7 info
  - added the optional property `asset_type` to the response with the `200` status
  - added the optional property `entity_id` to the response with the `200` status
  - added the optional property `event` to the response with the `200` status
  - added the optional property `metric` to the response with the `200` status
  - …3 more
- **2026-08-28** `c3a987e5f6ab`: 3 info
  - added the optional property `match_type` to the response with the `200` status
  - added the optional property `members/items/flip` to the response with the `200` status
  - added the optional property `start_datetime` to the response with the `200` status

[Operation history](https://skmtc.dev/rivermarkets/apis/river-finance-api/changes/v1/generic-assets/:generic_asset_id/get.md)

---

[API](https://skmtc.dev/rivermarkets/apis/river-finance-api.md) - [All operations](https://skmtc.dev/rivermarkets/apis/river-finance-api/llms.txt) - [OpenAPI document](https://skmtc.dev/rivermarkets/apis/river-finance-api/revisions/3732aea08430?raw)
