CoinGecko and CoinMarketCap Keyless APIs
Consulta datos de criptomonedas con las APIs keyless/public de CoinGecko,
GeckoTerminal y CoinMarketCap. No requiere API key.
Para catálogo ampliado, comparación de proveedores y docs oficiales, leer
references/keyless-apis.md.
API Overview
| Servicio |
Base URL |
Auth |
Rate limit (aprox.) |
| CoinGecko |
https://api.coingecko.com/api/v3 |
Ninguna |
~10–30 calls/min (por IP) |
| GeckoTerminal |
https://api.geckoterminal.com/api/v2 |
Ninguna |
~10 calls/min |
| CoinMarketCap Keyless |
https://pro-api.coinmarketcap.com/public-api |
Ninguna (GET only; no enviar X-CMC_PRO_API_KEY) |
Más agresivo que keyed |
- Respuestas: JSON.
- Scope de este skill: solo keyless. No usar Demo/Pro keys en v1.
- No recomendado para producción ni polling frecuente.
- Realidad empírica del rate limit (jul 2026): los límites de arriba son optimistas bajo uso sostenido. Ráfagas cada ~2-3s a CoinGecko o GeckoTerminal empiezan a devolver
429 a los ~8 requests, no a los ~10-30/min nominales — probablemente porque el límite es compartido entre ambos servicios por IP, no independiente por servicio. Espaciar al menos 6-8s entre requests (no 2s) evita la mayoría de los 429 en sesiones de varios minutos.
- Failure mode no obvio: cuando se llama desde un browser (
fetch), un 429 a veces no llega como respuesta HTTP 429 sino como TypeError: Failed to fetch — un error de red opaco indistinguible de un problema de conectividad real. Si el código solo reintenta en response.status === 429, este caso se escapa. Tratar cualquier fetch que falle (catch) durante una ráfaga como candidato a rate limit y aplicar el mismo backoff, no solo reintentar en 429 explícito.
Llamar desde el browser (CORS)
Ambos, CoinGecko y GeckoTerminal, responden access-control-allow-origin: *
(confirmado jul 2026) — fetch() funciona directo desde código client-side
(ej. un artifact HTML estático) sin proxy ni backend intermedio. Útil para
construir widgets/dashboards que corren enteramente en el browser del
usuario.
Cuándo usar cada fuente
| Intención |
Fuente |
Endpoints típicos |
| Precio simple, markets, histórico, trending, global |
CoinGecko |
/simple/price, /coins/markets, /coins/{id}/market_chart, /search/trending, /global |
| Pools, trades, OHLCV onchain |
GeckoTerminal |
/networks/.../trending_pools, .../ohlcv/{timeframe}, .../trades |
| Listings, quotes, Fear & Greed, conversión, DEX CMC |
CoinMarketCap |
/v3/cryptocurrency/listings/latest, /v3/cryptocurrency/quotes/latest, /v3/fear-and-greed/latest, /v2/tools/price-conversion |
Regla práctica: CoinGecko para precios/histórico; CMC para rankings/índices/Fear & Greed; GeckoTerminal para DEX onchain.
Endpoints clave
CoinGecko
GET /simple/price
GET /coins/markets
GET /coins/{id}
GET /coins/{id}/market_chart
GET /coins/{id}/ohlc
GET /coins/{id}/tickers — mercados individuales donde CoinGecko detecta el coin (exchange/DEX, volumen, spread, is_stale, is_anomaly, last_traded_at). Es el endpoint para responder "¿qué mercados conoce CoinGecko de este token?" o para cruzar contra datos onchain (ver GeckoTerminal abajo) y detectar pools que CoinGecko todavía no lista.
GET /search/trending
GET /global
GET /coins/categories
{id} usa slugs de CoinGecko (bitcoin, ethereum), no tickers sueltos.
Ejemplos:
curl -s "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usd,ars" | jq '.'
curl -s "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&per_page=10&page=1" | jq '.'
curl -s "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30&interval=daily" | jq '.'
curl -s "https://api.coingecko.com/api/v3/search/trending" | jq '.'
GeckoTerminal (Onchain DEX)
GET /networks/{network}/trending_pools
GET /networks/new_pools
GET /networks/{network}/pools/{address}/ohlcv/{timeframe}
GET /networks/{network}/pools/{address}/trades
GET /networks/{network}/tokens/{address}/pools — todos los pools de un token en una red
GET /networks/{network}/tokens/multi/{addresses} — batch: hasta ~30 addresses separadas por coma en un solo request, con ?include=top_pools trae de una los pools top de cada token. Reduce N requests a 1 — usarlo siempre que se consulten varios tokens conocidos en la misma red en vez de iterar uno por uno.
Ejemplo:
curl -s "https://api.geckoterminal.com/api/v2/networks/solana/trending_pools" | jq '.'
# batch: varios tokens, una sola llamada
curl -s "https://api.geckoterminal.com/api/v2/networks/eth/tokens/multi/0xdac17f958d2ee523a2206206994597c13d831ec7,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48?include=top_pools" | jq '.'
CoinMarketCap Keyless
Prefijo obligatorio: /public-api antes del path del endpoint.
Solo GET. No enviar header de API key.
GET /public-api/v1/cryptocurrency/map
GET /public-api/v3/cryptocurrency/listings/latest
GET /public-api/v3/cryptocurrency/quotes/latest
GET /public-api/v2/cryptocurrency/info
GET /public-api/v1/global-metrics/quotes/latest
GET /public-api/v2/tools/price-conversion
GET /public-api/v1/cryptocurrency/categories
GET /public-api/v3/fear-and-greed/latest
GET /public-api/v3/fear-and-greed/historical
- DEX:
/public-api/v4/dex/spot-pairs/latest, /public-api/v4/dex/pairs/quotes/latest, /public-api/v1/dex/token, etc.
CMC usa IDs numéricos (1 = BTC, 1027 = ETH) o symbol según el endpoint.
Ejemplos:
curl -s "https://pro-api.coinmarketcap.com/public-api/v1/simple/price?ids=1,1027&convert=USD" | jq '.'
curl -s "https://pro-api.coinmarketcap.com/public-api/v3/cryptocurrency/listings/latest?limit=10" | jq '.'
curl -s "https://pro-api.coinmarketcap.com/public-api/v3/fear-and-greed/latest" | jq '.'
curl -s "https://pro-api.coinmarketcap.com/public-api/v2/tools/price-conversion?amount=100&symbol=BTC&convert=USD,ARS" | jq '.'
Workflow
- Detectar intención y elegir fuente (tabla de arriba).
- Validar parámetros:
- CoinGecko:
ids/{id} (slug), vs_currency / vs_currencies, days, per_page.
- GeckoTerminal:
network (ej. solana, eth), address de pool, timeframe.
- CMC: IDs numéricos o
symbol, convert, limit; path siempre bajo /public-api.
- Ejecutar
curl -s y parsear con jq.
- Si hay
429 (o un fetch que falla en seco durante una ráfaga — ver nota de rate limit arriba), aplicar exponential backoff (ver Error Handling) partiendo de al menos ~10-25s, no 2s. Evitar ráfagas: espaciar requests, no dispararlos en paralelo.
- Presentar primero un resumen accionable; luego detalle.
- Aclarar que los datos son informativos, sin recomendación financiera.
- Preferir cache local de respuestas recientes para no abusar del rate limit.
Error Handling
- 429 Too Many Requests:
- Los límites nominales (CoinGecko ~10–30/min; GeckoTerminal ~10/min; CMC keyless más agresivo) son optimistas en la práctica — ver nota empírica arriba.
- Esperar y reintentar con backoff más largo de lo intuitivo (ej. 10s, 20s, 40s en vez de 2s, 4s, 8s). Máximo 2–4 reintentos.
- Desde un browser, un
TypeError: Failed to fetch durante ráfaga es casi siempre este mismo caso disfrazado — tratarlo igual que un 429 explícito.
- 4xx por params inválidos:
- Revisar slug vs ticker (CG), ID numérico (CMC), network/address (GeckoTerminal).
- Informar el parámetro incorrecto; no inventar IDs.
- Red/timeout:
- Reintentar hasta 2 veces con espera corta.
- Si falla, devolver mensaje claro con el endpoint consultado.
- JSON inesperado / endpoint no keyless:
- Mostrar mínimo crudo útil y aclarar que el endpoint puede no estar en keyless.
Presenting Results
- Precio: valor, moneda fiat, timestamp si existe.
- Markets/listings: top N con precio, market cap, volumen, % cambio.
- Histórico/OHLC: ventana pedida y puntos relevantes (inicio, fin, min/max).
- Trending / Fear & Greed: score o lista corta + contexto.
- DEX: pool, network, liquidez/volumen cuando estén en la respuesta.
- No dar consejo de inversión.
Out of Scope
Este skill no debe usar en v1:
- Headers/keys Demo o Pro (
x-cg-demo-api-key, X-CMC_PRO_API_KEY)
- Base Trial Pro de CMC (
/trial-pro-api) salvo lectura documentada en references
- Polling continuo o integraciones de producción
- Endpoints que explícitamente requieren plan pago
Reference
Detalle ampliado: references/keyless-apis.md
1---2name: coingecko-and-coinmarketcap-apis3description: Consulta precios, market cap, trending, historico OHLC, Fear & Greed y datos DEX/onchain via APIs keyless (sin API key) de CoinGecko, GeckoTerminal y CoinMarketCap. Usar cuando el usuario pida "precio bitcoin", "market cap eth", "trending crypto", "fear and greed", "pools solana", "ohlcv dex", "conversion BTC a USD/ARS", "CoinGecko", "CoinMarketCap", "GeckoTerminal", o datos crypto publicos sin autenticacion.4---5
6# CoinGecko and CoinMarketCap Keyless APIs
7
8Consulta datos de criptomonedas con las APIs **keyless/public** de CoinGecko,
9GeckoTerminal y CoinMarketCap. No requiere API key.
10
11Para catálogo ampliado, comparación de proveedores y docs oficiales, leer
12`references/keyless-apis.md`.
13
14## API Overview
15
16| Servicio | Base URL | Auth | Rate limit (aprox.) |
17|----------|----------|------|---------------------|
18| **CoinGecko** | `https://api.coingecko.com/api/v3` | Ninguna | ~10–30 calls/min (por IP) |
19| **GeckoTerminal** | `https://api.geckoterminal.com/api/v2` | Ninguna | ~10 calls/min |
20| **CoinMarketCap Keyless** | `https://pro-api.coinmarketcap.com/public-api` | Ninguna (GET only; **no** enviar `X-CMC_PRO_API_KEY`) | Más agresivo que keyed |
21
22- Respuestas: JSON.
23- Scope de este skill: solo keyless. No usar Demo/Pro keys en v1.
24- No recomendado para producción ni polling frecuente.
25- **Realidad empírica del rate limit (jul 2026)**: los límites de arriba son optimistas bajo uso sostenido. Ráfagas cada ~2-3s a CoinGecko o GeckoTerminal empiezan a devolver `429` a los ~8 requests, no a los ~10-30/min nominales — probablemente porque el límite es compartido entre ambos servicios por IP, no independiente por servicio. Espaciar al menos 6-8s entre requests (no 2s) evita la mayoría de los 429 en sesiones de varios minutos.
26- **Failure mode no obvio**: cuando se llama desde un browser (`fetch`), un 429 a veces **no** llega como respuesta HTTP 429 sino como `TypeError: Failed to fetch` — un error de red opaco indistinguible de un problema de conectividad real. Si el código solo reintenta en `response.status === 429`, este caso se escapa. Tratar cualquier `fetch` que falle (catch) durante una ráfaga como candidato a rate limit y aplicar el mismo backoff, no solo reintentar en 429 explícito.
27
28### Llamar desde el browser (CORS)
29
30Ambos, CoinGecko y GeckoTerminal, responden `access-control-allow-origin: *`
31(confirmado jul 2026) — `fetch()` funciona directo desde código client-side
32(ej. un artifact HTML estático) sin proxy ni backend intermedio. Útil para
33construir widgets/dashboards que corren enteramente en el browser del
34usuario.
35
36## Cuándo usar cada fuente
37
38| Intención | Fuente | Endpoints típicos |
39|-----------|--------|-------------------|
40| Precio simple, markets, histórico, trending, global | CoinGecko | `/simple/price`, `/coins/markets`, `/coins/{id}/market_chart`, `/search/trending`, `/global` |
41| Pools, trades, OHLCV onchain | GeckoTerminal | `/networks/.../trending_pools`, `.../ohlcv/{timeframe}`, `.../trades` |
42| Listings, quotes, Fear & Greed, conversión, DEX CMC | CoinMarketCap | `/v3/cryptocurrency/listings/latest`, `/v3/cryptocurrency/quotes/latest`, `/v3/fear-and-greed/latest`, `/v2/tools/price-conversion` |
43
44Regla práctica: CoinGecko para precios/histórico; CMC para rankings/índices/Fear & Greed; GeckoTerminal para DEX onchain.
45
46## Endpoints clave
47
48### CoinGecko
49
50- `GET /simple/price`
51- `GET /coins/markets`
52- `GET /coins/{id}`
53- `GET /coins/{id}/market_chart`
54- `GET /coins/{id}/ohlc`
55- `GET /coins/{id}/tickers` — mercados individuales donde CoinGecko detecta el coin (exchange/DEX, volumen, spread, `is_stale`, `is_anomaly`, `last_traded_at`). Es el endpoint para responder "¿qué mercados conoce CoinGecko de este token?" o para cruzar contra datos onchain (ver GeckoTerminal abajo) y detectar pools que CoinGecko todavía no lista.
56- `GET /search/trending`
57- `GET /global`
58- `GET /coins/categories`
59
60`{id}` usa slugs de CoinGecko (`bitcoin`, `ethereum`), no tickers sueltos.
61
62Ejemplos:
63
64```bash
65curl -s "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usd,ars" | jq '.'
66
67curl -s "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&per_page=10&page=1" | jq '.'
68
69curl -s "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30&interval=daily" | jq '.'
70
71curl -s "https://api.coingecko.com/api/v3/search/trending" | jq '.'
72```
73
74### GeckoTerminal (Onchain DEX)
75
76- `GET /networks/{network}/trending_pools`
77- `GET /networks/new_pools`
78- `GET /networks/{network}/pools/{address}/ohlcv/{timeframe}`
79- `GET /networks/{network}/pools/{address}/trades`
80- `GET /networks/{network}/tokens/{address}/pools` — todos los pools de un token en una red
81- `GET /networks/{network}/tokens/multi/{addresses}` — **batch**: hasta ~30 addresses separadas por coma en un solo request, con `?include=top_pools` trae de una los pools top de cada token. Reduce N requests a 1 — usarlo siempre que se consulten varios tokens conocidos en la misma red en vez de iterar uno por uno.
82
83Ejemplo:
84
85```bash
86curl -s "https://api.geckoterminal.com/api/v2/networks/solana/trending_pools" | jq '.'
87
88# batch: varios tokens, una sola llamada
89curl -s "https://api.geckoterminal.com/api/v2/networks/eth/tokens/multi/0xdac17f958d2ee523a2206206994597c13d831ec7,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48?include=top_pools" | jq '.'
90```
91
92### CoinMarketCap Keyless
93
94Prefijo obligatorio: `/public-api` antes del path del endpoint.
95Solo `GET`. No enviar header de API key.
96
97- `GET /public-api/v1/cryptocurrency/map`
98- `GET /public-api/v3/cryptocurrency/listings/latest`
99- `GET /public-api/v3/cryptocurrency/quotes/latest`
100- `GET /public-api/v2/cryptocurrency/info`
101- `GET /public-api/v1/global-metrics/quotes/latest`
102- `GET /public-api/v2/tools/price-conversion`
103- `GET /public-api/v1/cryptocurrency/categories`
104- `GET /public-api/v3/fear-and-greed/latest`
105- `GET /public-api/v3/fear-and-greed/historical`
106- DEX: `/public-api/v4/dex/spot-pairs/latest`, `/public-api/v4/dex/pairs/quotes/latest`, `/public-api/v1/dex/token`, etc.
107
108CMC usa IDs numéricos (`1` = BTC, `1027` = ETH) o `symbol` según el endpoint.
109
110Ejemplos:
111
112```bash
113curl -s "https://pro-api.coinmarketcap.com/public-api/v1/simple/price?ids=1,1027&convert=USD" | jq '.'
114
115curl -s "https://pro-api.coinmarketcap.com/public-api/v3/cryptocurrency/listings/latest?limit=10" | jq '.'
116
117curl -s "https://pro-api.coinmarketcap.com/public-api/v3/fear-and-greed/latest" | jq '.'
118
119curl -s "https://pro-api.coinmarketcap.com/public-api/v2/tools/price-conversion?amount=100&symbol=BTC&convert=USD,ARS" | jq '.'
120```
121
122## Workflow
123
1241. Detectar intención y elegir fuente (tabla de arriba).
1252. Validar parámetros:
126 - CoinGecko: `ids`/`{id}` (slug), `vs_currency` / `vs_currencies`, `days`, `per_page`.
127 - GeckoTerminal: `network` (ej. `solana`, `eth`), `address` de pool, `timeframe`.
128 - CMC: IDs numéricos o `symbol`, `convert`, `limit`; path siempre bajo `/public-api`.
1293. Ejecutar `curl -s` y parsear con `jq`.
1304. Si hay `429` (o un `fetch` que falla en seco durante una ráfaga — ver nota de rate limit arriba), aplicar exponential backoff (ver Error Handling) partiendo de al menos ~10-25s, no 2s. Evitar ráfagas: espaciar requests, no dispararlos en paralelo.
1315. Presentar primero un resumen accionable; luego detalle.
1326. Aclarar que los datos son informativos, sin recomendación financiera.
1337. Preferir cache local de respuestas recientes para no abusar del rate limit.
134
135## Error Handling
136
137- **429 Too Many Requests**:
138 - Los límites nominales (CoinGecko ~10–30/min; GeckoTerminal ~10/min; CMC keyless más agresivo) son optimistas en la práctica — ver nota empírica arriba.
139 - Esperar y reintentar con backoff más largo de lo intuitivo (ej. 10s, 20s, 40s en vez de 2s, 4s, 8s). Máximo 2–4 reintentos.
140 - Desde un browser, un `TypeError: Failed to fetch` durante ráfaga es casi siempre este mismo caso disfrazado — tratarlo igual que un 429 explícito.
141- **4xx por params inválidos**:
142 - Revisar slug vs ticker (CG), ID numérico (CMC), network/address (GeckoTerminal).
143 - Informar el parámetro incorrecto; no inventar IDs.
144- **Red/timeout**:
145 - Reintentar hasta 2 veces con espera corta.
146 - Si falla, devolver mensaje claro con el endpoint consultado.
147- **JSON inesperado / endpoint no keyless**:
148 - Mostrar mínimo crudo útil y aclarar que el endpoint puede no estar en keyless.
149
150## Presenting Results
151
152- Precio: valor, moneda fiat, timestamp si existe.
153- Markets/listings: top N con precio, market cap, volumen, % cambio.
154- Histórico/OHLC: ventana pedida y puntos relevantes (inicio, fin, min/max).
155- Trending / Fear & Greed: score o lista corta + contexto.
156- DEX: pool, network, liquidez/volumen cuando estén en la respuesta.
157- No dar consejo de inversión.
158
159## Out of Scope
160
161Este skill no debe usar en v1:
162
163- Headers/keys Demo o Pro (`x-cg-demo-api-key`, `X-CMC_PRO_API_KEY`)
164- Base Trial Pro de CMC (`/trial-pro-api`) salvo lectura documentada en references
165- Polling continuo o integraciones de producción
166- Endpoints que explícitamente requieren plan pago
167
168## Reference
169
170Detalle ampliado: [references/keyless-apis.md](references/keyless-apis.md)