Finnhub API — Datos Financieros en Tiempo Real
API REST con 32 endpoints gratuitos que cubre: cotizaciones en vivo, velas OHLCV, perfiles de empresa, fundamentales, noticias, forex, crypto, datos económicos, calendario de earnings y WebSocket.
Base URL: https://finnhub.io/api/v1
Documentación oficial: finnhub.io/docs/api
Pricing: finnhub.io/pricing
⚠️ IMPORTANTE: Endpoints Free vs Premium
Este skill documenta todos los endpoints, pero marca claramente cuáles son:
- ✅ FREE — Funcionan con el plan gratuito (60 calls/min, sin tarjeta)
- 🔒 PREMIUM — Requieren plan pago (Starter $11.99/mes+, Professional $49.99/mes o Enterprise)
NOTA CRÍTICA: El plan gratuito de Finnhub es mucho más limitado de lo que su documentación sugiere. Según pruebas con una API key gratuita real (2026), solo los siguientes endpoints funcionan:
/quote (cotización), /stock/profile2 (perfil empresa), /stock/peers (pares), /stock/earnings (earnings)
/stock/recommendation (recomendaciones), /stock/metric (métricas), /news (noticias mercado)
/company-news (noticias empresa), /search (búsqueda), /stock/market-status (estado mercado)
Endpoints como stock/candle (velas OHLCV), stock/financials, stock/price-target, stock/dividend, forex/rates, crypto/candle requieren plan pago.
Ver la tabla completa en references/ENDPOINTS.md.
Autenticación
Obtener API Key (GRATIS, sin tarjeta de crédito)
- Ir a: https://finnhub.io/register
- Crear cuenta (email + contraseña)
- Copiar la API Key del dashboard: https://finnhub.io/dashboard
- Plan gratuito: 60 calls/minuto, 30 calls/segundo máximo
Usar la API Key
import os
API_KEY = os.getenv("FINNHUB_API_KEY") # Recomendado (variable de entorno)
# O directamente en tests:
# API_KEY = "tu_api_key_aqui"
# Header (recomendado)
X-Finnhub-Token: tu_api_key
# O query param
?token=tu_api_key
⚠️ NUNCA hardcodear la API key en código compartido.
Rate Limits
| Límite |
Plan Free |
Starter ($11.99/mes) |
Professional ($49.99/mes) |
Enterprise ($3500/mes) |
| Calls/minuto |
60 |
300+ |
300+ |
900 (market), 300 (fund) |
| Calls/segundo |
30 (global) |
30 (global) |
30 (global) |
30 (global) |
| WebSocket símbolos |
50 |
Ilimitado |
Ilimitado |
Ilimitado |
| Historia OHLCV |
Limitada |
30+ años |
30+ años |
30+ años |
| Noticias |
1 año |
20 años |
20 años |
20 años |
| Cobertura fundamental |
US |
Global |
Global |
Global |
Tip: si recibís HTTP 429, esperá 1-2 segundos antes de reintentar.
Uso Rápido
1. Cotización en tiempo real
import requests
API_KEY = "tu_api_key"
BASE = "https://finnhub.io/api/v1"
r = requests.get(f"{BASE}/quote", params={"symbol": "AAPL", "token": API_KEY})
quote = r.json()
print(f"AAPL: ${quote['c']:.2f} ({quote['dp']:+.2f}%)")
2. Perfil de empresa
r = requests.get(f"{BASE}/stock/profile2", params={"symbol": "AAPL", "token": API_KEY})
profile = r.json()
print(f"{profile['name']} | {profile['finnhubIndustry']} | Market Cap: ${profile['marketCapitalization']/1000:.2f}B")
3. Noticias de una empresa
r = requests.get(f"{BASE}/company-news", params={
"symbol": "AAPL", "from": "2025-01-01", "to": "2025-01-15", "token": API_KEY
})
for article in r.json()[:3]:
print(f" {article['headline'][:80]}...")
4. Velas OHLCV diarias
import time
end = int(time.time())
start = end - (90 * 86400) # 90 días
r = requests.get(f"{BASE}/stock/candle", params={
"symbol": "AAPL", "resolution": "D",
"from": start, "to": end, "token": API_KEY
})
candles = r.json()
print(f"Status: {candles['s']}, velas: {len(candles['c'])}")
5. Búsqueda de símbolos
r = requests.get(f"{BASE}/search", params={"q": "microsoft", "token": API_KEY})
for result in r.json()["result"]:
print(f"{result['symbol']}: {result['description']} ({result['type']})")
Scripts Disponibles
| Script |
Descripción |
Endpoints que usa |
| finnhub_client.py |
Cliente Python completo con todos los endpoints gratuitos |
quote, candle, profile2, peers, metric, financials, earnings, recommendation, price-target, company-news, news, forex, crypto, search, economic, market-status, dividends, splits, calendar |
| finnhub_cli.py |
Interfaz de línea de comandos para consultas rápidas |
quote, profile2, search, news, peers, earnings, market-status |
| download_multiple.py |
Descarga batches de datos por categorías |
quote, candle, metric, financials, earnings, recommendation, company-news |
Cobertura de la API (según pruebas con key gratuita real)
| Categoría |
Endpoints |
Free |
Premium |
| Cotizaciones |
quote |
✅ |
— |
| Perfil empresa |
profile2, peers |
✅ |
— |
| Earnings |
earnings (4 quarters free) |
✅ |
— |
| Recomendaciones |
recommendation (~8 meses) |
✅ |
— |
| Métricas (133) |
metric (sin historia, solo último valor) |
✅ |
— |
| Noticias |
company-news, news |
✅ |
— |
| Búsqueda |
search |
✅ |
— |
| Estado mercado |
market-status |
✅ |
— |
| Velas OHLCV |
candle |
— |
🔒 Premium |
| Estados financieros |
financials, financials-reported, price-target |
— |
🔒 Premium |
| Dividendos/Splits |
dividend, split |
— |
🔒 Premium |
| Forex |
rates, candle, exchange, symbol |
— |
🔒 Premium |
| Crypto |
candle, exchange, symbol |
— |
🔒 Premium |
| Económico |
economic/code, economic, country |
— |
🔒 Premium |
| Símbolos |
stock/symbol, market-holiday, ipo-calendar |
— |
🔒 Premium |
| WebSocket |
Trades (50 símbolos) |
— |
🔒 Premium |
| Insider, Ownership |
insider-transactions, ownership, etc. |
— |
🔒 Premium |
| Estimates |
eps-estimate, revenue-estimate, etc. |
— |
🔒 Premium |
| ETFs, Índices, Bonos |
etf/profile, etf/holdings, index/constituents, bond/price, etc. |
— |
🔒 Premium |
| Alternativos |
social-sentiment, covid-19, esg-score, etc. |
— |
🔒 Premium |
⚠️ Esta tabla está basada en pruebas reales con una API key gratuita en junio 2026. Finnhub cambia su política de acceso periódicamente. Verificar siempre en la documentación oficial.
Buenas Prácticas
- Usar variable de entorno
FINNHUB_API_KEY en vez de hardcodear
- Cachear resultados: los datos fundamentales cambian poco (especialmente company profile, financials)
- Rate limiting: 60 calls/min gratis = 1 call por segundo como mínimo
- Evitar endpoints premium con key gratuita — recibirás error
"You don't have access to this resource."
- WebSocket: solo 1 conexión por API key, 50 símbolos en free
- Reutilizar sesión HTTP para mejor performance (
requests.Session())
- No usar para trading de alta frecuencia: API pública, sin garantía de latencia ultra-baja
Recursos
1---2name: finnhub3description: API de datos financieros completa: stocks US/global, forex, crypto, fundamentales, noticias, earnings, recomendaciones, WebSocket. 60 calls/min gratis.4license: MIT5---67# Finnhub API — Datos Financieros en Tiempo Real89API REST con **32 endpoints gratuitos** que cubre: cotizaciones en vivo, velas OHLCV, perfiles de empresa, fundamentales, noticias, forex, crypto, datos económicos, calendario de earnings y WebSocket.1011**Base URL:** `https://finnhub.io/api/v1`12**Documentación oficial:** [finnhub.io/docs/api](https://finnhub.io/docs/api)13**Pricing:** [finnhub.io/pricing](https://finnhub.io/pricing)1415---1617## ⚠️ IMPORTANTE: Endpoints Free vs Premium1819Este skill documenta **todos** los endpoints, pero marca claramente cuáles son:2021- ✅ **FREE** — Funcionan con el plan gratuito (60 calls/min, sin tarjeta)22- 🔒 **PREMIUM** — Requieren plan pago (Starter $11.99/mes+, Professional $49.99/mes o Enterprise)2324> **NOTA CRÍTICA:** El plan gratuito de Finnhub es **mucho más limitado** de lo que su documentación sugiere. Según pruebas con una API key gratuita real (2026), solo los siguientes endpoints funcionan:25> - `/quote` (cotización), `/stock/profile2` (perfil empresa), `/stock/peers` (pares), `/stock/earnings` (earnings)26> - `/stock/recommendation` (recomendaciones), `/stock/metric` (métricas), `/news` (noticias mercado)27> - `/company-news` (noticias empresa), `/search` (búsqueda), `/stock/market-status` (estado mercado)28>29> Endpoints como `stock/candle` (velas OHLCV), `stock/financials`, `stock/price-target`, `stock/dividend`, `forex/rates`, `crypto/candle` **requieren plan pago**.30>31> Ver la tabla completa en [references/ENDPOINTS.md](./references/ENDPOINTS.md).3233---34353637## Autenticación3839### Obtener API Key (GRATIS, sin tarjeta de crédito)40411. Ir a: [https://finnhub.io/register](https://finnhub.io/register)422. Crear cuenta (email + contraseña)433. Copiar la API Key del dashboard: [https://finnhub.io/dashboard](https://finnhub.io/dashboard)444. **Plan gratuito**: 60 calls/minuto, 30 calls/segundo máximo4546### Usar la API Key4748```python49import os50API_KEY = os.getenv("FINNHUB_API_KEY") # Recomendado (variable de entorno)51# O directamente en tests:52# API_KEY = "tu_api_key_aqui"53```5455```bash56# Header (recomendado)57X-Finnhub-Token: tu_api_key5859# O query param60?token=tu_api_key61```6263**⚠️ NUNCA hardcodear la API key en código compartido.**6465---6667## Rate Limits6869| Límite | Plan Free | Starter ($11.99/mes) | Professional ($49.99/mes) | Enterprise ($3500/mes) |70|--------|-----------|---------------------|-------------------------|----------------------|71| **Calls/minuto** | 60 | 300+ | 300+ | 900 (market), 300 (fund) |72| **Calls/segundo** | 30 (global) | 30 (global) | 30 (global) | 30 (global) |73| **WebSocket símbolos** | 50 | Ilimitado | Ilimitado | Ilimitado |74| **Historia OHLCV** | Limitada | 30+ años | 30+ años | 30+ años |75| **Noticias** | 1 año | 20 años | 20 años | 20 años |76| **Cobertura fundamental** | US | Global | Global | Global |7778> **Tip:** si recibís HTTP 429, esperá 1-2 segundos antes de reintentar.7980---8182## Uso Rápido8384### 1. Cotización en tiempo real8586```python87import requests8889API_KEY = "tu_api_key"90BASE = "https://finnhub.io/api/v1"9192r = requests.get(f"{BASE}/quote", params={"symbol": "AAPL", "token": API_KEY})93quote = r.json()94print(f"AAPL: ${quote['c']:.2f} ({quote['dp']:+.2f}%)")95```9697### 2. Perfil de empresa9899```python100r = requests.get(f"{BASE}/stock/profile2", params={"symbol": "AAPL", "token": API_KEY})101profile = r.json()102print(f"{profile['name']} | {profile['finnhubIndustry']} | Market Cap: ${profile['marketCapitalization']/1000:.2f}B")103```104105### 3. Noticias de una empresa106107```python108r = requests.get(f"{BASE}/company-news", params={109 "symbol": "AAPL", "from": "2025-01-01", "to": "2025-01-15", "token": API_KEY110})111for article in r.json()[:3]:112 print(f" {article['headline'][:80]}...")113```114115### 4. Velas OHLCV diarias116117```python118import time119end = int(time.time())120start = end - (90 * 86400) # 90 días121r = requests.get(f"{BASE}/stock/candle", params={122 "symbol": "AAPL", "resolution": "D",123 "from": start, "to": end, "token": API_KEY124})125candles = r.json()126print(f"Status: {candles['s']}, velas: {len(candles['c'])}")127```128129### 5. Búsqueda de símbolos130131```python132r = requests.get(f"{BASE}/search", params={"q": "microsoft", "token": API_KEY})133for result in r.json()["result"]:134 print(f"{result['symbol']}: {result['description']} ({result['type']})")135```136137---138139## Scripts Disponibles140141| Script | Descripción | Endpoints que usa |142|--------|-------------|-------------------|143| **[finnhub_client.py](./scripts/finnhub_client.py)** | Cliente Python completo con todos los endpoints gratuitos | quote, candle, profile2, peers, metric, financials, earnings, recommendation, price-target, company-news, news, forex, crypto, search, economic, market-status, dividends, splits, calendar |144| **[finnhub_cli.py](./scripts/finnhub_cli.py)** | Interfaz de línea de comandos para consultas rápidas | quote, profile2, search, news, peers, earnings, market-status |145| **[download_multiple.py](./scripts/download_multiple.py)** | Descarga batches de datos por categorías | quote, candle, metric, financials, earnings, recommendation, company-news |146147---148149## Cobertura de la API (según pruebas con key gratuita real)150151| Categoría | Endpoints | Free | Premium |152|-----------|-----------|:----:|:-------:|153| **Cotizaciones** | quote | ✅ | — |154| **Perfil empresa** | profile2, peers | ✅ | — |155| **Earnings** | earnings (4 quarters free) | ✅ | — |156| **Recomendaciones** | recommendation (~8 meses) | ✅ | — |157| **Métricas (133)** | metric (sin historia, solo último valor) | ✅ | — |158| **Noticias** | company-news, news | ✅ | — |159| **Búsqueda** | search | ✅ | — |160| **Estado mercado** | market-status | ✅ | — |161| **Velas OHLCV** | candle | — | 🔒 Premium |162| **Estados financieros** | financials, financials-reported, price-target | — | 🔒 Premium |163| **Dividendos/Splits** | dividend, split | — | 🔒 Premium |164| **Forex** | rates, candle, exchange, symbol | — | 🔒 Premium |165| **Crypto** | candle, exchange, symbol | — | 🔒 Premium |166| **Económico** | economic/code, economic, country | — | 🔒 Premium |167| **Símbolos** | stock/symbol, market-holiday, ipo-calendar | — | 🔒 Premium |168| **WebSocket** | Trades (50 símbolos) | — | 🔒 Premium |169| **Insider, Ownership** | insider-transactions, ownership, etc. | — | 🔒 Premium |170| **Estimates** | eps-estimate, revenue-estimate, etc. | — | 🔒 Premium |171| **ETFs, Índices, Bonos** | etf/profile, etf/holdings, index/constituents, bond/price, etc. | — | 🔒 Premium |172| **Alternativos** | social-sentiment, covid-19, esg-score, etc. | — | 🔒 Premium |173174> ⚠️ Esta tabla está basada en **pruebas reales con una API key gratuita en junio 2026**. Finnhub cambia su política de acceso periódicamente. Verificar siempre en la [documentación oficial](https://finnhub.io/docs/api).175176---177178## Buenas Prácticas1791801. **Usar variable de entorno** `FINNHUB_API_KEY` en vez de hardcodear1812. **Cachear resultados**: los datos fundamentales cambian poco (especialmente company profile, financials)1823. **Rate limiting**: 60 calls/min gratis = 1 call por segundo como mínimo1834. **Evitar endpoints premium** con key gratuita — recibirás error `"You don't have access to this resource."`1845. **WebSocket**: solo 1 conexión por API key, 50 símbolos en free1856. **Reutilizar sesión HTTP** para mejor performance (`requests.Session()`)1867. **No usar para trading de alta frecuencia**: API pública, sin garantía de latencia ultra-baja187188---189190## Recursos191192- [Documentación oficial Finnhub](https://finnhub.io/docs/api)193- [Pricing oficial](https://finnhub.io/pricing)194- [Python SDK oficial](https://github.com/Finnhub-Stock-API/finnhub-python)195- [Referencia de endpoints free vs premium](./references/ENDPOINTS.md)196- [Dashboard (API key)](https://finnhub.io/dashboard)197- [Estado del servicio](https://status.finnhub.io/)