Market Data API =============== REST API endpoints for market data and pricing information. Market Data Endpoints --------------------- OHLCV Data ~~~~~~~~~~ **GET** ``/api/market-data/ohlcv/{symbol}`` Get OHLCV (Open, High, Low, Close, Volume) candlestick data for a symbol. **Parameters:** - ``symbol`` (path, required): Trading pair symbol (e.g., "BTC/USD") - ``timeframe`` (query, optional): Timeframe for candles (default: "1h") - Valid values: "1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w" - ``limit`` (query, optional): Number of candles to return (default: 100, max: 1000) - ``exchange`` (query, optional): Exchange name (deprecated, uses pricing service) **Response:** .. code-block:: json [ { "time": 1609459200, "open": 50000.0, "high": 51000.0, "low": 49000.0, "close": 50000.0, "volume": 1000.0 } ] **Example:** .. code-block:: bash curl http://localhost:8000/api/market-data/ohlcv/BTC%2FUSD?timeframe=1h&limit=100 Ticker Data ~~~~~~~~~~~ **GET** ``/api/market-data/ticker/{symbol}`` Get current ticker data for a symbol, including price, volume, and provider information. **Parameters:** - ``symbol`` (path, required): Trading pair symbol (e.g., "BTC/USD") **Response:** .. code-block:: json { "symbol": "BTC/USD", "bid": 50000.0, "ask": 50001.0, "last": 50000.5, "high": 51000.0, "low": 49000.0, "volume": 1000000.0, "timestamp": 1609459200000, "provider": "CCXT-Kraken" } **Example:** .. code-block:: bash curl http://localhost:8000/api/market-data/ticker/BTC%2FUSD Provider Health ~~~~~~~~~~~~~~~ **GET** ``/api/market-data/providers/health`` Get health status for pricing providers. **Parameters:** - ``provider`` (query, optional): Specific provider name to get health for **Response:** .. code-block:: json { "active_provider": "CCXT-Kraken", "health": { "CCXT-Kraken": { "status": "healthy", "last_check": "2025-01-01T12:00:00Z", "last_success": "2025-01-01T12:00:00Z", "success_count": 100, "failure_count": 2, "avg_response_time": 0.123, "consecutive_failures": 0, "circuit_breaker_open": false } } } **Example:** .. code-block:: bash curl http://localhost:8000/api/market-data/providers/health?provider=CCXT-Kraken Provider Status ~~~~~~~~~~~~~~~ **GET** ``/api/market-data/providers/status`` Get detailed status for all pricing providers, including cache statistics. **Response:** .. code-block:: json { "active_provider": "CCXT-Kraken", "providers": { "CCXT-Kraken": { "status": "healthy", "last_check": "2025-01-01T12:00:00Z", "success_count": 100, "failure_count": 2, "avg_response_time": 0.123 }, "CoinGecko": { "status": "unknown", "success_count": 0, "failure_count": 0 } }, "cache": { "size": 50, "max_size": 1000, "hits": 1000, "misses": 200, "hit_rate": 83.33, "evictions": 0, "avg_age_seconds": 30.5 } } **Example:** .. code-block:: bash curl http://localhost:8000/api/market-data/providers/status Provider Configuration ~~~~~~~~~~~~~~~~~~~~~~ **GET** ``/api/market-data/providers/config`` Get current provider configuration. **Response:** .. code-block:: json { "primary": [ { "name": "kraken", "enabled": true, "priority": 1 }, { "name": "coinbase", "enabled": true, "priority": 2 } ], "fallback": { "name": "coingecko", "enabled": true, "api_key": "" }, "caching": { "ticker_ttl": 2, "ohlcv_ttl": 60, "max_cache_size": 1000 }, "websocket": { "enabled": true, "reconnect_interval": 5, "ping_interval": 30 } } **Example:** .. code-block:: bash curl http://localhost:8000/api/market-data/providers/config Update Provider Configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **PUT** ``/api/market-data/providers/config`` Update provider configuration. **Request Body:** .. code-block:: json { "primary": [ { "name": "kraken", "enabled": true, "priority": 1 } ], "caching": { "ticker_ttl": 5, "ohlcv_ttl": 120 } } **Response:** .. code-block:: json { "message": "Configuration updated successfully", "config": { "primary": [...], "fallback": {...}, "caching": {...}, "websocket": {...} } } **Example:** .. code-block:: bash curl -X PUT http://localhost:8000/api/market-data/providers/config \ -H "Content-Type: application/json" \ -d '{"caching": {"ticker_ttl": 5}}' WebSocket Updates ----------------- The WebSocket endpoint at ``/ws`` broadcasts real-time price updates. **Connection:** .. code-block:: javascript const ws = new WebSocket('ws://localhost:8000/ws'); ws.onopen = () => { // Subscribe to symbol updates ws.send(JSON.stringify({ type: 'subscribe', symbol: 'BTC/USD' })); }; ws.onmessage = (event) => { const message = JSON.parse(event.data); if (message.type === 'price_update') { console.log('Price update:', message); } }; **Message Types:** - ``subscribe``: Subscribe to price updates for a symbol - ``unsubscribe``: Unsubscribe from price updates - ``price_update``: Price update broadcast (contains exchange, symbol, price, timestamp) - ``provider_status_update``: Provider status change notification **Price Update Message:** .. code-block:: json { "type": "price_update", "exchange": "pricing", "symbol": "BTC/USD", "price": "50000.50", "timestamp": "2025-01-01T12:00:00Z" } Error Responses --------------- All endpoints may return standard HTTP error codes: - ``400 Bad Request``: Invalid request parameters - ``404 Not Found``: Symbol or provider not found - ``500 Internal Server Error``: Server error Error response format: .. code-block:: json { "detail": "Error message describing what went wrong" }