Files
proxmox/docs/archive/historical/ORACLE_API_KEYS_REQUIRED.md

164 lines
4.5 KiB
Markdown
Raw Normal View History

# Oracle Publisher API Keys - Requirements
**Date**: $(date)
**Status**: API Keys Recommended/Required
---
## 🔍 Current Issues
### CoinGecko API
- **Error**: `429 Too Many Requests`
- **Cause**: Free tier rate limit exceeded
- **Solution**: API key recommended for higher rate limits
- **Status**: API key is **OPTIONAL** but **RECOMMENDED**
### Binance API
- **Error**: `451 Service unavailable from a restricted location`
- **Cause**: Geo-blocking (not API key issue)
- **Solution**: Use alternative API or proxy
- **Status**: API key won't help - need alternative data source
---
## ✅ API Key Requirements
### CoinGecko API Key (Recommended)
**Why**: Free tier has strict rate limits (10-50 calls/minute). With an API key, you get:
- Higher rate limits (up to 500 calls/minute for paid plans)
- More reliable service
- Better support
**How to Get**:
1. Visit: https://www.coingecko.com/en/api/pricing
2. Sign up for free tier (Basic plan)
3. Get your API key from dashboard
**How to Configure**:
```bash
# Add to /opt/oracle-publisher/.env
COINGECKO_API_KEY=your_api_key_here
```
**Update URL**:
```bash
# Original (no key):
DATA_SOURCE_1_URL=https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd
# With API key:
DATA_SOURCE_1_URL=https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd&x_cg_demo_api_key=YOUR_KEY
# OR (for Pro):
DATA_SOURCE_1_URL=https://pro-api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd&x_cg_pro_api_key=YOUR_KEY
```
### Binance API
**Status**: Not an API key issue - Binance is geo-blocking requests from certain locations.
**Solutions**:
1. **Remove Binance** - Use only CoinGecko (with API key)
2. **Use Alternative APIs**:
- CoinMarketCap (requires API key)
- CryptoCompare (free tier available)
- OpenExchangeRates (for fiat conversions)
---
## 🔧 Recommended Configuration
### Option 1: CoinGecko Only (with API key)
```bash
# /opt/oracle-publisher/.env
DATA_SOURCE_1_URL=https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd&x_cg_demo_api_key=YOUR_KEY
DATA_SOURCE_1_PARSER=ethereum.usd
# Remove or comment out Binance source
# DATA_SOURCE_2_URL=...
```
### Option 2: Multiple Sources (CoinGecko + Alternative)
```bash
# CoinGecko (with API key)
DATA_SOURCE_1_URL=https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd&x_cg_demo_api_key=YOUR_KEY
DATA_SOURCE_1_PARSER=ethereum.usd
# Alternative: CryptoCompare (no key needed)
DATA_SOURCE_2_URL=https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD
DATA_SOURCE_2_PARSER=USD
```
### Option 3: CoinMarketCap (requires API key)
```bash
DATA_SOURCE_1_URL=https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=ETH&convert=USD
DATA_SOURCE_1_PARSER=data.ETH.quote.USD.price
COINMARKETCAP_API_KEY=your_key_here
# Add header: X-CMC_PRO_API_KEY: your_key_here
```
---
## 🚀 Quick Fix: Add CoinGecko API Key
```bash
ssh root@192.168.11.10
pct exec 3500 -- bash
cd /opt/oracle-publisher
nano .env
# Add or update:
COINGECKO_API_KEY=your_api_key_here
DATA_SOURCE_1_URL=https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd&x_cg_demo_api_key=${COINGECKO_API_KEY}
# Remove Binance (geo-blocked):
# DATA_SOURCE_2_URL=https://api.binance.com/api/v3/ticker/price?symbol=ETHUSDT
# Save and restart service
systemctl restart oracle-publisher
```
---
## 📝 Update Python Script
The Python script needs to be updated to:
1. Support API keys in URLs (template variables)
2. Add custom headers for APIs that require them (like CoinMarketCap)
3. Handle API key rotation
**Example update needed**:
```python
# In fetch_price_from_source method
url = source.url
if hasattr(config, 'coingecko_api_key') and config.coingecko_api_key:
url = url.replace('${COINGECKO_API_KEY}', config.coingecko_api_key)
headers = {}
if 'coinmarketcap' in url.lower() and hasattr(config, 'coinmarketcap_api_key'):
headers['X-CMC_PRO_API_KEY'] = config.coinmarketcap_api_key
response = requests.get(url, headers=headers, timeout=10)
```
---
## ✅ Summary
| API | API Key Required? | Current Issue | Solution |
|-----|------------------|---------------|----------|
| **CoinGecko** | Optional (recommended) | Rate limiting (429) | Get free API key for higher limits |
| **Binance** | No | Geo-blocking (451) | Remove or use alternative API |
| **CoinMarketCap** | Yes | Not configured | Add API key if using |
| **CryptoCompare** | No | Not configured | Free alternative option |
---
**Recommendation**: Get a free CoinGecko API key and remove Binance source.
---
**Last Updated**: $(date)