Catalog and calendar
The catalog tells you what exists and when it trades. This page shows the workflow; the parameters and response fields are in the API reference.
Every catalog response carries catalog_version, an ETag and
Cache-Control: private, max-age=300. Send the ETag back as If-None-Match;
an unchanged catalog answers 304.
Catalog endpoints need a valid key but no data permission, so they are the cheapest way to check that a key works.
Venues and markets
Start with GET /v2/catalog/venues. Each venue has a code, name, MIC, time zone,
country and the markets it serves. The markets served today are summarized on
Data coverage.
curl -s -H "Authorization: Bearer $VEINMESH_API_KEY" \
"https://data.cyberun.cloud/v2/catalog/venues" \
| jq '.venues[] | {code, timezone, markets}'
Products
A product is a tradable family, for example SHFE.rb. Products carry the
multiplier and tick size. List them with GET /v2/catalog/products, optionally
for one venue.
curl -s -H "Authorization: Bearer $VEINMESH_API_KEY" \
"https://data.cyberun.cloud/v2/catalog/products?venue=SHFE" \
| jq '.products[] | {code, name, multiplier, tick_size}'
Instruments
An instrument is one tradable thing: a dated future, an option, a stock, an ETF,
a fund or an index. Use GET /v2/catalog/instruments to search and page through
them, or GET /v2/catalog/instruments/{symbol} for one.
# Every listed rebar future
curl -s -H "Authorization: Bearer $VEINMESH_API_KEY" \
"https://data.cyberun.cloud/v2/catalog/instruments?product=SHFE.rb&kind=future&status=active"
# One instrument, with the datasets it has
curl -s -H "Authorization: Bearer $VEINMESH_API_KEY" \
"https://data.cyberun.cloud/v2/catalog/instruments/SHFE.rb2701"
The single-instrument answer has instrument, datasets and, when it has no
data, an availability object. datasets: [] with
availability.status: reference_only means the instrument is in the catalog but
has no published data; it is not an error.
Each instrument has:
instrument_id: stable, never reused; the right key for your own tables;symbol: the public name valid at the time you ask;kind,venue,product,currency,multiplier,tick_size;listed_day,last_trading_dayandexpirywhen known;- for stocks and funds,
board(main,star,chinext,bse,fund) andrisk_warning(none,st,*st);risk_warning_sinceis the first day veinmesh observed the current status, when known; - for funds,
fund_type(etf,lof,reit,other) andtracking_board(main,star,chinext,bse,none): the board whose price-limit rules apply;nonemeans no A-share board (bond, commodity, QDII, money-market or REIT funds); absent when unknown; underlying,strike,right,exercise_stylefor options;legsfor combos;aliaseswith validity periods for exchange-specific spellings.
The risk_warning value comes from the listed short name; when it changes, the
catalog version changes. Stock and fund listed_day values come from reviewed
public exchange snapshots; an instrument listed after its snapshot keeps
listed_day: null until the snapshot is refreshed. Funds always use the fund
board, including STAR and ChiNext trackers; read tracking_board to choose the
price-limit rule. For SZSE funds, the exchange's published 20% price-limit fund
list is authoritative: a fund on that list is star or chinext, and the rest
are main (equity, 10%) or none (bond, commodity, QDII, money-market or
REIT, 10%).
Symbols resolve as of a date. If a spelling matches two instruments on that day,
the answer is ambiguous_symbol (409); use the full symbol or instrument_id.
See Symbols.
Continuous contracts
GET /v2/catalog/continuous lists each futures product's current .main
contract for the requested day. GET /v2/catalog/continuous/{symbol} resolves
one SHFE.rb.main or .cN. The answer gives the continuous symbol, its
product, the actual contract and that contract's instrument_id. Virtual
continuous symbols are not listed as instruments in
GET /v2/catalog/instruments.
curl -s -H "Authorization: Bearer $VEINMESH_API_KEY" \
"https://data.cyberun.cloud/v2/catalog/continuous?product=SHFE.rb"
Paging
Instrument lists are paged. Pass the answer's next_cursor back as cursor;
null means the end. A cursor belongs to the filters that produced it.
Datasets and prepared days
GET /v2/catalog/datasets lists each dataset with its resolution, book depth,
snapshot interval and the trading days already prepared for that venue.
curl -s -H "Authorization: Bearer $VEINMESH_API_KEY" \
"https://data.cyberun.cloud/v2/catalog/datasets?venue=SHFE" \
| jq '.datasets[] | {dataset, first_day, last_day, depth, resolution}'
first_day and last_day are the published range, not the source's earliest
date. A day outside it can still be fetched when you query it; see
Data coverage. For a single venue and dataset,
GET /v2/catalog/coverage returns one status per trading day:
available, missing or out_of_range.
Calendar
GET /v2/catalog/calendar returns every trading day in a range with its
sessions in UTC. Pass the venue, and usually the product: different products on
one venue can have different session templates.
curl -s -H "Authorization: Bearer $VEINMESH_API_KEY" \
"https://data.cyberun.cloud/v2/catalog/calendar?venue=SHFE&product=SHFE.rb&from_day=2026-10-19&to_day=2026-10-23" \
| jq '.days[] | {trading_day, sessions}'
Session labels are the exchange's. A night session starts on the previous
calendar day and belongs to the trading day in the answer. Do not assume a
label or a fixed set of labels; see Core concepts.
Calendar requests cover a limited range; see Limits and make several requests for a longer span.