generated: '2026-08-11' method: derived source: json-schema/btc-war-live-market-data-api-market-snapshot-v1.schema.json + json-schema/btc-war-live-market-data-api-market-observation-v1.schema.json + openapi/_original/btc-war-live-market-data-api-openapi.json note: >- A three-entity read model. There are no identifiers to create, no id-prefix scheme and no foreign keys — an entity's identity IS its URL, pinned in the response body as a const `id` and echoed by the Link header. Relationships below are containment and provenance, derived from JSON Schema $ref and const-URI fields. entities: - name: MarketSnapshot schema: json-schema/btc-war-live-market-data-api-market-snapshot-v1.schema.json identity: https://btcwar.net/api/market-snapshot/v1.json served_by: [getLiveMarketSnapshot, getLiveMarketSnapshotJsonLd] fields: [schemaVersion, schema, id, canonicalPage, about, methodology, generatedAt, source, window, maxAgeSeconds, markets, limitations] note: Fixed cardinality — markets is exactly nine items (minItems 9, maxItems 9); a partial snapshot is never served. - name: MarketObservation schema: json-schema/btc-war-live-market-data-api-market-observation-v1.schema.json identity: https://btcwar.net/api/market-observation/v1/{symbol}.json served_by: [getLiveMarketObservation, getLiveMarketObservationJsonLd] fields: [schemaVersion, schema, id, canonicalPage, about, methodology, generatedAt, source, window, maxAgeSeconds, market, limitations] note: The same envelope as MarketSnapshot with a single `market` in place of the `markets` array. - name: Market schema: json-schema/btc-war-live-market-data-api-market-snapshot-v1.schema.json#/$defs/market identity: symbol (enum of nine values) fields: [symbol, baseAsset, quoteAsset, lastPrice, priceChange, priceChangePercent, highPrice, lowPrice, baseVolume, quoteVolume, tradeCount, windowOpenAt, sourceObservedAt, sourceLagSeconds, status] note: All 15 fields are required. Prices are exact decimal strings, never floats. - name: Source schema: json-schema/btc-war-live-market-data-api-market-snapshot-v1.schema.json#/properties/source identity: Binance Spot (const) fields: [name, venue, marketType, endpoint, documentation, dataSource] note: Provenance block shared by every observation in a response. - name: MarketDataStatus schema: openapi components.schemas.MarketDataStatus identity: https://btcwar.net/api/status/v1.json served_by: [getLiveMarketDataStatus] fields: [schemaVersion, id, checkedAt, service, source, data, endpoints, limitations] relationships: - from: MarketSnapshot to: Market type: has_many via: markets[] cardinality: exactly 9 - from: MarketObservation to: Market type: has_one via: market - from: MarketSnapshot to: Source type: has_one via: source - from: MarketObservation to: Source type: has_one via: source - from: MarketObservation to: MarketSnapshot type: belongs_to via: derived selection — an observation is one member of the same validated nine-market snapshot, sharing its generatedAt, source and window - from: MarketDataStatus to: MarketSnapshot type: references via: endpoints.snapshot enums: symbol: [BTCUSDT, ETHUSDT, BNBUSDT, SOLUSDT, XRPUSDT, TRXUSDT, DOGEUSDT, ZECUSDT, ADAUSDT] market_status: [fresh, unavailable] window: rolling PT24H value_types: decimal_string: lastPrice, priceChange, priceChangePercent, highPrice, lowPrice, baseVolume, quoteVolume date_time: generatedAt, windowOpenAt, sourceObservedAt, checkedAt vocabulary: vocabulary/btc-war-live-market-data-api-vocabulary.yaml