curl --request GET \
--url https://api.rivermarkets.com/v1/generic-assets \
--header 'X-River-Key-Id: <api-key>' \
--header 'X-River-Org-Id: <api-key>' \
--header 'X-River-Signature: <api-key>' \
--header 'X-River-Timestamp: <api-key>'import requests
url = "https://api.rivermarkets.com/v1/generic-assets"
headers = {
"X-River-Key-Id": "<api-key>",
"X-River-Timestamp": "<api-key>",
"X-River-Signature": "<api-key>",
"X-River-Org-Id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-River-Key-Id': '<api-key>',
'X-River-Timestamp': '<api-key>',
'X-River-Signature': '<api-key>',
'X-River-Org-Id': '<api-key>'
}
};
fetch('https://api.rivermarkets.com/v1/generic-assets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.rivermarkets.com/v1/generic-assets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-River-Key-Id: <api-key>",
"X-River-Org-Id: <api-key>",
"X-River-Signature: <api-key>",
"X-River-Timestamp: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.rivermarkets.com/v1/generic-assets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-River-Key-Id", "<api-key>")
req.Header.Add("X-River-Timestamp", "<api-key>")
req.Header.Add("X-River-Signature", "<api-key>")
req.Header.Add("X-River-Org-Id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.rivermarkets.com/v1/generic-assets")
.header("X-River-Key-Id", "<api-key>")
.header("X-River-Timestamp", "<api-key>")
.header("X-River-Signature", "<api-key>")
.header("X-River-Org-Id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rivermarkets.com/v1/generic-assets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-River-Key-Id"] = '<api-key>'
request["X-River-Timestamp"] = '<api-key>'
request["X-River-Signature"] = '<api-key>'
request["X-River-Org-Id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"assets": [
{
"generic_asset_id": "<string>",
"name": "<string>",
"river_ids": [
123
],
"inserted_at": "<string>",
"asset_type": "<string>",
"period": "<string>",
"metric": "<string>",
"entity_id": "<string>",
"side": "<string>",
"strike": 123,
"description": "<string>",
"category": "<string>",
"subcategory": "<string>",
"resolves_at": "<string>",
"start_datetime": "<string>",
"owner_subaccount_id": "<string>",
"status": "<string>",
"match_type": "<string>",
"event": {
"event_id": "<string>",
"series": "<string>",
"start": "<string>",
"title": "<string>",
"participants": [
{
"entity": {
"entity_id": "<string>",
"name": "<string>",
"abbreviation": "<string>"
},
"role": "<string>"
}
]
},
"member_count": 0,
"exchanges": [
"<string>"
],
"volume": 123,
"volume_24h": 123,
"members": [
{
"river_id": 123,
"exchange_value": 123,
"exchange_name": "<string>",
"tick_size_price": 123,
"tick_size_qty": 123,
"minimum_order_size": 123,
"neg_risk": true,
"name": "<string>",
"status": "active",
"ticker": "<string>",
"token_id_yes": "<string>",
"token_id_no": "<string>",
"slug": "<string>",
"tick_structure": "uniform",
"expiration_datetime": "<string>",
"start_datetime": "<string>",
"neg_risk_id": "<string>",
"condition_id": "<string>",
"subtitle": "<string>",
"description": "<string>",
"category": "Other",
"subcategory": "<string>",
"rank": 123,
"event_ticker": "<string>",
"event_title": "<string>",
"event_subtitle": "<string>",
"is_combo": false,
"flip": true,
"volume": 123,
"volume_24h": 123,
"series_ticker": "<string>",
"image": "<string>",
"last_price": 123,
"primary_entity_name": "<string>",
"event_market_count": 123
}
]
}
],
"total_events": 123,
"subcategories": [
{
"subcategory": "<string>",
"count": 123
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}List Generic Assets
List generic assets visible to the caller (their own + platform-curated approved).
Event-paginated (event_limit) requests group assets by generic event, order events by
sort_by, order assets within an event winner-first then by line, and hydrate members.
curl --request GET \
--url https://api.rivermarkets.com/v1/generic-assets \
--header 'X-River-Key-Id: <api-key>' \
--header 'X-River-Org-Id: <api-key>' \
--header 'X-River-Signature: <api-key>' \
--header 'X-River-Timestamp: <api-key>'import requests
url = "https://api.rivermarkets.com/v1/generic-assets"
headers = {
"X-River-Key-Id": "<api-key>",
"X-River-Timestamp": "<api-key>",
"X-River-Signature": "<api-key>",
"X-River-Org-Id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-River-Key-Id': '<api-key>',
'X-River-Timestamp': '<api-key>',
'X-River-Signature': '<api-key>',
'X-River-Org-Id': '<api-key>'
}
};
fetch('https://api.rivermarkets.com/v1/generic-assets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.rivermarkets.com/v1/generic-assets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-River-Key-Id: <api-key>",
"X-River-Org-Id: <api-key>",
"X-River-Signature: <api-key>",
"X-River-Timestamp: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.rivermarkets.com/v1/generic-assets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-River-Key-Id", "<api-key>")
req.Header.Add("X-River-Timestamp", "<api-key>")
req.Header.Add("X-River-Signature", "<api-key>")
req.Header.Add("X-River-Org-Id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.rivermarkets.com/v1/generic-assets")
.header("X-River-Key-Id", "<api-key>")
.header("X-River-Timestamp", "<api-key>")
.header("X-River-Signature", "<api-key>")
.header("X-River-Org-Id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rivermarkets.com/v1/generic-assets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-River-Key-Id"] = '<api-key>'
request["X-River-Timestamp"] = '<api-key>'
request["X-River-Signature"] = '<api-key>'
request["X-River-Org-Id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"assets": [
{
"generic_asset_id": "<string>",
"name": "<string>",
"river_ids": [
123
],
"inserted_at": "<string>",
"asset_type": "<string>",
"period": "<string>",
"metric": "<string>",
"entity_id": "<string>",
"side": "<string>",
"strike": 123,
"description": "<string>",
"category": "<string>",
"subcategory": "<string>",
"resolves_at": "<string>",
"start_datetime": "<string>",
"owner_subaccount_id": "<string>",
"status": "<string>",
"match_type": "<string>",
"event": {
"event_id": "<string>",
"series": "<string>",
"start": "<string>",
"title": "<string>",
"participants": [
{
"entity": {
"entity_id": "<string>",
"name": "<string>",
"abbreviation": "<string>"
},
"role": "<string>"
}
]
},
"member_count": 0,
"exchanges": [
"<string>"
],
"volume": 123,
"volume_24h": 123,
"members": [
{
"river_id": 123,
"exchange_value": 123,
"exchange_name": "<string>",
"tick_size_price": 123,
"tick_size_qty": 123,
"minimum_order_size": 123,
"neg_risk": true,
"name": "<string>",
"status": "active",
"ticker": "<string>",
"token_id_yes": "<string>",
"token_id_no": "<string>",
"slug": "<string>",
"tick_structure": "uniform",
"expiration_datetime": "<string>",
"start_datetime": "<string>",
"neg_risk_id": "<string>",
"condition_id": "<string>",
"subtitle": "<string>",
"description": "<string>",
"category": "Other",
"subcategory": "<string>",
"rank": 123,
"event_ticker": "<string>",
"event_title": "<string>",
"event_subtitle": "<string>",
"is_combo": false,
"flip": true,
"volume": 123,
"volume_24h": 123,
"series_ticker": "<string>",
"image": "<string>",
"last_price": 123,
"primary_entity_name": "<string>",
"event_market_count": 123
}
]
}
],
"total_events": 123,
"subcategories": [
{
"subcategory": "<string>",
"count": 123
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
UUID of your API key (from Settings → API Keys).
Current unix milliseconds (unix seconds also accepted). Must be within 30s of server time.
Base64 Ed25519 signature over the canonical request: METHOD\nPATH\nSORTED_QUERY\nTIMESTAMP\nSHA256(body) hex. See /api-reference/authentication for the full recipe.
Your organization id (from GET /v1/rate-limit). Signed requests are rate limited per organization on this header; a missing or wrong value is refused with 403.
Query Parameters
Search name, description, series and team names
1Filter by category. Repeat to filter to multiple categories.
Filter by subcategory
'me' for own baskets only, 'platform' for public only
'approved' (default), 'expired', 'pending', 'rejected' or 'all'
Event start at or after (UTC)
Event start before (UTC)
start-time (default), ending-soon, volume, trending
Paginate by event (game): return this many events with all their assets, members inline, and total_events. Max 200, or 2000 with a start window. Omit for the flat, unpaginated list (no members).
x >= 1Event offset for event pagination
x >= 0Cap assets returned per event
x >= 1Response
Successful Response
Show child attributes
Show child attributes
Total event groups matching the filters (event-paginated requests only)
Event counts per subcategory for the chip row (event-paginated requests only)
Show child attributes
Show child attributes

