CoinGecko se usa en Finward para:
- Buscar criptos —
GET /api/investments/coins/search?q=para autocompletado al crear inversiones. - Actualizar precios —
POST /api/investments/refresh-pricesactualizacurrentPricede inversiones CRYPTO.
Flujo: (1) Creas inversión con type: "CRYPTO" y ticker = CoinGecko ID (ej. bitcoin). El formulario ofrece autocompletado vía /coins/search. (2) Llamas a POST /api/investments/refresh-prices. (3) El backend consulta CoinGecko en lote y actualiza currentPrice en la BD.
Para acciones y ETFs, ver YAHOO_FINANCE.md.
- Sin API key: API pública, ~30 llamadas/minuto
- Con API key (opcional):
COINGECKO_API_KEYen.env→ Pro API, rate limit mayor - Uso: personal, no comercial (ver Términos CoinGecko)
El formulario incluye autocompletado de ticker para criptos:
- Inversiones → Nuevo Activo
- Tipo Cripto
- Nombre: ej. "Bitcoin"
- Ticker: escribe (ej.
bit) → aparecen sugerencias de CoinGecko; selecciona o escribe el CoinGecko ID en minúsculas (ej.bitcoin,ethereum) - Cantidad, Precio compra, guardar
El backend normaliza el ticker a minúsculas para CRYPTO. Tras guardar, refresh-prices actualiza los precios desde CoinGecko.
| Cripto | Ticker (usar en inversión) |
|---|---|
| Bitcoin | bitcoin |
| Ethereum | ethereum |
| USDT | tether |
| XRP | ripple |
| Solana | solana |
| BNB | binancecoin |
| Dogecoin | dogecoin |
| Cardano | cardano |
| Polkadot | polkadot |
IDs completos: api.coingecko.com/api/v3/coins/list. Búsqueda: coingecko.com.
Precios en MXN (esquema default). CoinGecko soporta usd, eur, etc.; por ahora fijamos MXN.
Si llamas refresh-prices muchas veces seguidas, CoinGecko puede devolver 429. Espera ~1 minuto y reintenta. El frontend limita las llamadas: auto-refresh solo si han pasado >15 min y botón manual con feedback.
Endpoints:
- Top criptos (para select):
GET /api/investments/coins/top?limit=50— Devuelve las 50 principales por capitalización. Permite elegir cripto en un select sin escribir. - Buscar criptos:
GET /api/investments/coins/search?q=bit
GET /api/investments/coins/search?q=bitcoin
Authorization: Bearer <token>Respuesta: { coins: [{ id, name, symbol, market_cap_rank, thumb, ... }] }. Implementación: searchCoins(query) en coingecko.ts → CoinGecko /search?query=.
- Actualizar precios:
POST /api/investments/refresh-prices(sin body ni query).
POST /api/investments/refresh-prices
Authorization: Bearer <token>Respuesta: { updated, crypto, stock } (updated = inversiones actualizadas).
Implementación backend: backend/src/lib/coingecko.ts → fetchPrices(ids, vsCurrency) y searchCoins(query). La ruta en investmentRoutes.ts usa searchCoins para el autocompletado y, en refresh-prices, agrupa todas las crypto del usuario, llama batch a CoinGecko /simple/price?ids=...&vs_currencies=mxn, y actualiza cada inversión.
- Botón "Actualizar precios": actualización manual. Llama al endpoint e invalida la query de inversiones. Muestra toast al completar.
- Indicador "Actualizado hace X min": usa el
lastPriceUpdatemás reciente de inversiones con ticker (crypto o stock). Muestra "Hace un momento", "Hace 5 min", etc. - Auto-refresh: si hay inversiones con ticker y la última actualización es mayor a 15 min, se llama automáticamente al abrir la página.
| Variable | Obligatorio | Descripción |
|---|---|---|
COINGECKO_API_KEY |
No | API key. Sin ella usa API pública (~30/min). Obtener en CoinGecko |
COINGECKO_DEMO_API |
No | Si es true, usa Demo API (api.coingecko.com). Las keys que empiezan con CG- son Demo. Si es Pro (de pago), omitir o false. |
Demo API (gratuita): usa api.coingecko.com y header x-cg-demo-api-key.
Pro API (de pago): usa pro-api.coingecko.com y header x-cg-pro-api-key.
En backend/.env (Demo key):
COINGECKO_DEMO_API=true
COINGECKO_API_KEY=CG-xxxxx
En backend/.env (Pro key o sin key):
# Sin COINGECKO_DEMO_API o =false
COINGECKO_API_KEY=cg_xxxxx
- Acciones, ETFs → Yahoo Finance
- CETES, bonos → sin API gratuita;
currentPricemanual