#!/usr/bin/env python3 """ Check Databento subscription and data availability. """ import os import databento as db import sys def main(): api_key = os.environ.get("DATABENTO_API_KEY") if not api_key: print("ERROR: DATABENTO_API_KEY environment variable not set") sys.exit(1) client = db.Historical(api_key) print("=" * 70) print("Databento Subscription Check") print("=" * 70) # Get billing information try: print("\n1. Checking Account Status...") # Note: There's no direct API for billing, but we can try to get cost for a known symbol # Let's try ES (S&P 500 E-mini) which is very common test_cases = [ ("XNAS.ITCH", "AAPL", "trades", "Nasdaq stocks"), ("GLBX.MDP3", "ES", "ohlcv-1m", "CME E-mini S&P 500"), ("GLBX.MDP3", "ES.FUT", "ohlcv-1m", "CME E-mini S&P 500 (FUT)"), ("GLBX.MDP3", "ESH24", "ohlcv-1m", "CME E-mini S&P 500 (Mar 2024)"), ] print("\n2. Testing Data Access...\n") for dataset, symbol, schema, description in test_cases: print(f"Testing: {description}") print(f" Dataset: {dataset}, Symbol: {symbol}, Schema: {schema}") try: cost = client.metadata.get_cost( dataset=dataset, symbols=[symbol], schema=schema, start="2024-01-02", end="2024-01-05" ) print(f" ✅ ACCESS GRANTED - Cost: ${cost:.4f} (3 days)") except Exception as e: error_msg = str(e) if "401" in error_msg or "unauthorized" in error_msg.lower(): print(f" ❌ UNAUTHORIZED - Need subscription") elif "404" in error_msg or "not found" in error_msg.lower(): print(f" ❌ NOT FOUND - Symbol doesn't exist") elif "symbology" in error_msg.lower(): print(f" ❌ SYMBOLOGY ERROR - Symbol can't be resolved") else: print(f" ❌ ERROR: {error_msg[:80]}") print() print("=" * 70) print("Diagnosis") print("=" * 70) print(""" Based on the results above: 1. If ALL tests show UNAUTHORIZED: → Your subscription doesn't include historical data access → You may only have live data access 2. If ONLY GLBX.MDP3 (CME) tests fail: → Your subscription doesn't include CME futures data → CME data requires a separate subscription tier 3. If SYMBOLOGY ERROR appears: → The symbol format is incorrect for that dataset → Try checking Databento's symbology guide 4. If some symbols work: → Your subscription is working, but specific instruments need adjustment Recommendations: - Check your Databento account subscription at: https://databento.com/account - For CME futures data (6E, ES, etc.), verify you have GLBX.MDP3 access - Contact Databento support if you believe you should have access """) except Exception as e: print(f"\nError checking subscription: {e}") if __name__ == "__main__": main()