
💰 API PHP para obtener el precio actual de Bitcoin en 2026: de un script simple a una solución de producción
El sitio acepta criptomonedas y el tipo de cambio fluctúa varios puntos porcentuales en media hora. El cliente quiere ver el precio actual del Bitcoin en moneda fiduciaria directamente en la interfaz: no una captura de pantalla de un exchange, sino un valor en vivo desde la API.
Monitorear manualmente el tipo de cambio en una pestaña de CoinMarketCap toma tiempo y ofrece datos con retraso. Por otro lado, los plugins de criptomonedas ya hechos suelen estar inflados: publicidad, solicitudes innecesarias, atados a una única fuente.
A continuación presentamos dos formas de obtener el precio actual del Bitcoin mediante PHP: desde un script básico de 10 líneas hasta una solución lista para producción con caché y selección de fuente. Sin planes de pago, sin SDK de 40 megabytes.
💡 Resumen rápido:
- Elegir una fuente de API: Bitpay (gratuita, no requiere clave) o CoinGecko (más datos, también gratuita)
- Escribir un script PHP con file_get_contents o cURL, se explican ambos enfoques
- Añadir manejo de errores y caché en archivo por 5 minutos para evitar consultar la API en cada carga de página
Qué es una API de cotización cripto y por qué la necesita un desarrollador PHP
Las API de exchanges y agregadores cripto devuelven el tipo de cambio actual por HTTP: usted hace una solicitud GET y recibe un JSON con un par «BTC/USD» y un número. No se requiere WebSocket ni suscripción: un script PHP común en un hosting económico lo maneja sin problema.
Escenarios típicos donde esto resulta útil:
- Pasarela de pago. Mostrar al usuario: «Importe a pagar: 0.00031 BTC», con el tipo de cambio obtenido de una API en lugar de un valor inventado.
- Panel de control. Un panel de administración de tienda en línea con un bloque de «Tipos de cambio de criptomonedas».
- Rastreador de portafolio. Usted posee 5 monedas y un script actualiza su valor total una vez por minuto.
Para este artículo se eligieron dos fuentes con acceso gratuito y sin registro: Bitpay y CoinGecko. Ambas funcionan sobre HTTPS, devuelven JSON y no requieren clave API en su nivel básico.

Paso 1: obtener el tipo de cambio mediante la API de Bitpay
Bitpay es un procesador de pagos para Bitcoin. Dispone de un endpoint público /api/rates que devuelve los tipos de cambio de BTC para más de 150 monedas fiduciarias en un único arreglo JSON. Sin token, sin límites de solicitudes para uso básico.
Enfoque simple: file_get_contents
El código funcional más corto. Añádalo a un archivo bitcoin-rates.php en la raíz de su sitio y ábralo en un navegador:
1 <?php 2 $url = "https://bitpay.com/api/rates"; 3 $json = json_decode(file_get_contents($url), true); 4 5 foreach ($json as $item) { 6 if ($item['code'] === 'USD') { 7 echo '1 BTC = $' . $item['rate'] . "\n"; 8 } 9 if ($item['code'] === 'EUR') { 10 echo '1 BTC = €' . $item['rate'] . "\n"; 11 } 12 }
El script solicita el arreglo completo de tipos de cambio, lo recorre y muestra solo USD y EUR. file_get_contents() con una URL HTTPS funciona si la directiva allow_url_fopen = On está habilitada en php.ini; en la mayoría de los proveedores de hosting está activa por defecto.
Enfoque más fiable: cURL
file_get_contents no establece tiempos de espera y falla silenciosamente ante errores de red. Para un sitio web real, cURL es la mejor opción:
1 <?php 2 $ch = curl_init(); 3 curl_setopt_array($ch, [ 4 CURLOPT_URL => 'https://bitpay.com/api/rates', 5 CURLOPT_RETURNTRANSFER => true, 6 CURLOPT_TIMEOUT => 10, 7 CURLOPT_SSL_VERIFYPEER => true, 8 ]); 9 $response = curl_exec($ch); 10 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 11 curl_close($ch); 12 13 if ($httpCode !== 200 || !$response) { 14 echo 'API temporarily unavailable.'; 15 exit; 16 } 17 18 $data = json_decode($response, true); 19 20 foreach ($data as $item) { 21 if ($item['code'] === 'USD') { 22 echo '1 BTC = $' . number_format($item['rate'], 2) . "\n"; 23 } 24 }
Un tiempo de espera de 10 segundos, verificación del código HTTP y number_format para una salida legible. En la práctica, un script como este es suficiente para incrustar el tipo de cambio en el pie de página o la barra lateral de un sitio.
Paso 2: fuente alternativa, API de CoinGecko
Bitpay solo proporciona tipos de cambio para BTC y BCH. Si usted también necesita Ethereum, Solana o cualquier otro activo del top 500, conéctese a la API de CoinGecko. El plan gratuito permite de 10 a 30 solicitudes por minuto sin clave.
Solicitud simple para precios de Bitcoin y Ethereum
El endpoint /api/v3/simple/price acepta una lista de monedas y divisas separadas por comas mediante el parámetro vs_currencies:
1 <?php 2 $url = 'https://api.coingecko.com/api/v3/simple/price' 3 . '?ids=bitcoin,ethereum' 4 . '&vs_currencies=usd,eur,rub'; 5 6 $ch = curl_init(); 7 curl_setopt_array($ch, [ 8 CURLOPT_URL => $url, 9 CURLOPT_RETURNTRANSFER => true, 10 CURLOPT_TIMEOUT => 10, 11 ]); 12 $response = curl_exec($ch); 13 curl_close($ch); 14 15 $prices = json_decode($response, true); 16 17 echo 'BTC: $' . $prices['bitcoin']['usd'] . ' / €' . $prices['bitcoin']['eur'] . "\n"; 18 echo 'ETH: $' . $prices['ethereum']['usd'] . ' / ₽' . $prices['ethereum']['rub'] . "\n";
La respuesta es compacta y contiene solo las monedas y divisas que usted solicitó. Sin necesidad de recorrer 150 entradas.
Qué más puede hacer CoinGecko
- Datos históricos:
/api/v3/coins/bitcoin/history?date=01-01-2026, el tipo de cambio en una fecha específica. - Datos de mercado:
/api/v3/coins/bitcoin, capitalización de mercado, volumen, cambio en 24 horas, suministro en circulación. - Monedas en tendencia:
/api/v3/search/trending, principales búsquedas del último día.
Para un tipo de cambio simple «BTC/USD», el primer ejemplo es suficiente. Si está construyendo un panel de control, conéctese al endpoint extendido.
Paso 3: caché y protección contra fallos de la API
Consultar una API externa en cada carga de página es una mala práctica. La red puede tener un tropiezo, el servidor de CoinGecko puede caerse por un minuto y el visitante ve un error en lugar del tipo de cambio.
Una solución robusta es la caché en archivo. El script guarda la respuesta de la API en un archivo JSON local y lo actualiza una vez cada 5 minutos. Todas las solicitudes intermedias leen de la caché, de forma instantánea y sin llamadas externas.
1 <?php 2 $cacheFile = __DIR__ . '/btc-cache.json'; 3 $cacheTime = 300; // 5 minutes 4 5 // If cache is fresh — read it 6 if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) { 7 $data = json_decode(file_get_contents($cacheFile), true); 8 echo '1 BTC = $' . number_format($data['bitcoin']['usd'], 2); 9 echo ' (cached, updated ' . date('H:i:s', filemtime($cacheFile)) . ')'; 10 exit; 11 } 12 13 // Cache is stale or missing — request API 14 $ch = curl_init(); 15 curl_setopt_array($ch, [ 16 CURLOPT_URL => 'https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd', 17 CURLOPT_RETURNTRANSFER => true, 18 CURLOPT_TIMEOUT => 10, 19 ]); 20 $response = curl_exec($ch); 21 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 22 curl_close($ch); 23 24 if ($httpCode !== 200 || !$response) { 25 // API is down — serve stale cache if available 26 if (file_exists($cacheFile)) { 27 $data = json_decode(file_get_contents($cacheFile), true); 28 echo '1 BTC = $' . number_format($data['bitcoin']['usd'], 2); 29 echo ' (stale cache — API did not respond)'; 30 exit; 31 } 32 echo 'No data available. Please try again later.'; 33 exit; 34 } 35 36 // Save fresh response and output 37 file_put_contents($cacheFile, $response); 38 $data = json_decode($response, true); 39 echo '1 BTC = $' . number_format($data['bitcoin']['usd'], 2); 40 echo ' (fresh data)';
Observe que el script verifica primero la caché y solo llama a la API cuando es necesario. Si la API no responde, se sirve el último tipo de cambio guardado con una etiqueta de «caché obsoleta». El visitante ve un número, no una página en blanco con un error.
Antes de desplegar en un sitio de producción, asegúrese de que PHP tenga permisos de escritura en el directorio del script. Realice también una copia de seguridad completa, ya que el script escribe un archivo en disco.
El video anterior ofrece un desglose visual de la API de CoinGecko con ejemplos de solicitud y respuesta en tiempo real. Resulta adecuado si es la primera vez que trabaja con una API cripto y desea ver el ciclo completo: desde la solicitud GET hasta el análisis del JSON.
⁉️🤔 Preguntas frecuentes
¿Qué API debo elegir, Bitpay o CoinGecko?
Si solo necesita el tipo de cambio de Bitcoin a dólar, opte por Bitpay. Es más simple, devuelve una respuesta como un arreglo único sin parámetros y no tiene límites. Si planea trabajar con una docena de monedas o mostrar gráficos, elija CoinGecko: más datos, endpoints flexibles y un plan gratuito que cubre las necesidades de un proyecto pequeño.
¿La API de Bitpay requiere una clave API?
El endpoint público
/api/ratesno requiere clave. Es un endpoint abierto que usan billeteras y exchanges para mostrar tipos de cambio. Los endpoints comerciales de Bitpay (crear facturas, aceptar pagos) sí requieren un token, pero no son necesarios para simplemente obtener tipos de cambio.
¿Por qué no la API de CoinMarketCap?
El plan gratuito de CoinMarketCap requiere registro y una clave. El límite es de 10 000 solicitudes por mes, suficiente para un proyecto pequeño. Sin embargo, para un enfoque de «empezar desde cero sin registro», Bitpay y CoinGecko son más convenientes: copie la URL, péguela en su código y funciona.
¿Qué hago si mi hosting bloquea file_get_contents para URLs externas?
Cambie a cURL, que está disponible en prácticamente cualquier hosting. Si cURL también está deshabilitado (algo raro en 2026), consulte a su proveedor de hosting sobre habilitar
curl.soen las extensiones de PHP. Una alternativa es usarwp_remote_get()dentro de WordPress; esta función opera a través de la API HTTP del núcleo y selecciona automáticamente un transporte disponible.
¿Con qué frecuencia se actualizan los tipos de cambio en la API?
Bitpay actualiza el tipo de cambio con cada solicitud; las cifras reflejan el diferencial actual del mercado. CoinGecko actualiza los datos una vez cada 30 a 60 segundos para el endpoint de precio simple. Para fines de visualización en un sitio web, una frecuencia de actualización de «una vez cada 5 minutos» es más que suficiente; el mercado cripto es volátil, pero no tanto como para que las fluctuaciones segundo a segundo importen en un bloque informativo.
Qué API elegir según su tarea
Bitpay y CoinGecko atienden necesidades diferentes sin competir directamente:
- Si está construyendo un formulario de pago con conversión «BTC → USD», use Bitpay: una sola línea de URL, código mínimo, tipos de cambio siempre actualizados.
- Si está construyendo un panel de control con gráficos y un portafolio de 10 monedas, use CoinGecko: solicitudes de precios por lote, datos históricos, capitalización de mercado y volumen en una sola llamada.
- Si necesita el inicio más rápido posible sin dependencias externas, use Bitpay sin cURL mediante
file_get_contents: 10 líneas de código y el tipo de cambio está en su página.
Comience de forma simple: copie el primer ejemplo de este artículo, reemplace la moneda por la suya y ábralo en un navegador. Si funciona, envuélvalo en caché usando la plantilla del paso 3 y despliéguelo en su sitio de producción. Cuéntenos en los comentarios qué API terminó eligiendo.



