Una API de explorador de BNB Chain es cualquier servicio que entrega a tu código datos de BNB Smart Chain: bloques, transacciones, saldos, tokens. En 2026 tienes tres vías gratuitas: los endpoints JSON-RPC públicos de BNB Chain (sin clave y con eth_call), indexadores sin clave como Binplorer y GoPlus, y el plan gratuito de MegaNode que hay detrás de BSCTrace. La API gratuita de BscScan ya no existe.
Esa última frase dejó fuera de juego a un buen puñado de bots, dashboards y scripts de fiscalidad durante el invierno. Esta guía es el parche. Empezamos por lo que cambió, comparamos todas las opciones en precio y límites, y luego te damos comandos curl listos para copiar y pegar para las llamadas que más usan los desarrolladores: altura de bloque, saldos, recibos, balanceOf vía eth_call, metadatos de tokens y motivos de revert. Todo probado contra los endpoints en vivo en septiembre de 2026. Al final verás exactamente cómo nuestro propio explorador de transacciones BNB lee la cadena sin una sola API key.
La API de BscScan está obsoleta. ¿Qué la ha sustituido?
El 18 de diciembre de 2025 la API de BscScan se retiró en favor de Etherscan API V2, que usa una sola clave y una sola URL base para más de 60 cadenas y elige la red con el parámetro chainid. La trampa: la tabla de cadenas soportadas de Etherscan marca la mainnet de BNB Smart Chain (56) y la testnet (97) como «Paid Tier Only». Lo probamos con una clave gratuita:
curl -s "https://api.etherscan.io/v2/api?chainid=56&module=proxy&action=eth_blockNumber&apikey=YOUR_FREE_KEY"
{"status":"0","message":"NOTOK",
"result":"Free API access is not supported for this chain. Please upgrade your api plan for full chain coverage. https://etherscan.io/apis"} El plan gratuito de Etherscan da 3 llamadas por segundo y hasta 100.000 al día, pero solo en determinadas cadenas. El plan más barato que cubre BSC es Lite (5 llamadas por segundo, 100.000 al día), que Etherscan lanzó a una cuarta parte del precio de su anterior plan de pago más económico. Hay dos excepciones que conviene conocer. Los endpoints de código fuente verificado y ABI (getsourcecode, getabi) siguen siendo gratis en todas las cadenas, BSC incluida. Y la mainnet de opBNB (204) y la testnet de opBNB (5611) siguen en el plan gratuito. Si quieres la historia completa del explorador en sí, lee nuestro análisis de BscScan.
La respuesta de BNB Chain fue una guía de migración de la API de BscScan a BSCTrace vía MegaNode, publicada ese mismo mes. Traduce las llamadas module/action de BscScan a JSON-RPC: account/balance pasa a ser eth_getBalance, proxy/eth_getTransactionReceipt se convierte en el método del mismo nombre y account/txlist se sustituye por nr_getAssetTransfers de NodeReal.
Tus opciones de API para BSC en 2026, comparadas
Este es el panorama en una sola pantalla. «Gratis» significa que se puede usar sin pagar; algunas opciones exigen igualmente registrarse para obtener una clave.
| Servicio | ¿Gratis en BSC? | Límites gratis | De pago desde | Ideal para |
|---|---|---|---|---|
| RPC público de BNB Chain | Sí, sin clave | 10.000 pet. / 5 min / IP | — | Lecturas en vivo, eth_call |
| PublicNode · 1RPC | Sí, sin clave | Uso razonable | Planes del proveedor | Failover, getLogs pequeños |
| BSCTrace / MegaNode | Sí, clave gratis | 10M CU/mes · 150 CUPS | 31 $/mes (anual) | Historial, transferencias, archivo |
| Binplorer | Sí, freekey | 2/s · 1.000/día | Clave personal | Saldos de tokens, precios |
| GoPlus Security | Sí, sin clave | Uso razonable | Planes de pago | Alertas de riesgo de tokens |
| Etherscan API V2 | No (solo pago) | Solo ABI y código | Plan Lite | Código heredado de BscScan |
| Blockscout | Sin instancia BSC | — | — | Solo autoalojado |
La mayoría de proyectos reales combinan dos o tres de estas piezas: RPC público para todo lo que un nodo puede responder, un indexador para el historial y un plan de pago solo cuando el volumen lo exige. Blockscout aparece en la lista porque mucha gente lo busca, pero no existe una instancia pública para BSC, como explicamos en nuestra guía sobre Blockscout en BNB Smart Chain. Para las interfaces de explorador que hay detrás de estas APIs, profundizan nuestro análisis de BSCTrace y el ranking de exploradores de BNB.
Endpoints RPC de BSC y sus límites
BNB Chain publica sus endpoints oficiales en la documentación de endpoints JSON-RPC. Probamos cada uno de los siguientes con eth_chainId y eth_blockNumber:
Diez mil peticiones cada cinco minutos salen a unas 33 por segundo desde una misma IP: de sobra para un dashboard o un bot, insuficiente para indexar la cadena. El endpoint público de dRPC (bsc.drpc.org) también funciona sin clave, pero nos limitó enseguida, y la antigua URL pública de BSC de Ankr ahora exige API key. Los endpoints y faucets de testnet los cubrimos en nuestra guía del explorador de testnet de BNB.
Ejemplos curl probados: eth_call y compañía, sin API key
Cada comando de esta sección se ejecutó contra los endpoints en vivo mientras escribíamos. Los resultados cambian con cada bloque, así que tus números serán otros; la forma de la respuesta, no. Todos los valores llegan como cadenas hexadecimales: conviértelos con printf '%d' 0x… o con el BigInt de tu lenguaje.
eth_blockNumber: altura del último bloque
curl -s -X POST https://bsc-dataseed.bnbchain.org \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
{"jsonrpc":"2.0","id":1,"result":"0x7628198"} # 0x7628198 = 123.896.216 eth_getBalance: saldo nativo de BNB
Devuelve wei (10-18 BNB). El ejemplo lee el contrato WBNB, que custodia todo el BNB envuelto.
curl -s -X POST https://bsc-dataseed.bnbchain.org \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_getBalance",
"params":["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c","latest"]}'
{"jsonrpc":"2.0","id":1,"result":"0x14a463f3d72d4db881ec3"}
# wei → BNB: divide entre 10^18 → ≈ 1.559.676,77 BNB en el contrato WBNB eth_getTransactionReceipt: ¿salió bien y qué se movió?
status vale 0x1 si la transacción tuvo éxito y 0x0 si hizo revert. Los movimientos de tokens están en logs: el topic 0 de un Transfer BEP-20 es siempre 0xddf252ad…b3ef, los topics 1 y 2 son el emisor y el destinatario rellenados a 32 bytes, y data es el importe. Nuestra guía para leer una transacción de BSC explica esos mismos campos en una interfaz visual.
curl -s -X POST https://bsc-dataseed.bnbchain.org \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_getTransactionReceipt",
"params":["0x596be466441dca5c43bff1e90aff65ad19d259e1713c408222ef4cb73700e17a"]}'
{"result":{"status":"0x1", "gasUsed":"0x86d3", # éxito, 34.515 de gas
"to":"0x55d398326f99059ff775485246999027b3197955", # el contrato de USDT
"logs":[{"topics":["0xddf252ad…b3ef", # Transfer(from,to,value)
"0x…bd612a3f30dca67bf60a39fd0d35e39b7ab80774", # emisor
"0x…db83e219c36b3d2fd876539402736a4e7a2f4f3d"], # destinatario
"data":"0x…3da08bf6de97920000"}], …}} # 1.136,82 USDT (18 decimales) eth_call con balanceOf: construye tú el calldata
El calldata es el selector de función de 4 bytes seguido de los argumentos, cada uno rellenado por la izquierda hasta 32 bytes. Para balanceOf(address) el selector es 0x70a08231; el argumento es la dirección sin 0x, en minúsculas y con 24 ceros delante hasta llegar a 64 caracteres hexadecimales. En bash:
ADDR=0x8894E0a0c962CB723c1976a4421c95949bE2D4E3
DATA=0x70a08231$(printf '%064s' $(echo ${ADDR#0x} | tr 'A-F' 'a-f') | tr ' ' 0)
echo $DATA
# 0x70a082310000000000000000000000008894e0a0c962cb723c1976a4421c95949be2d4e3
curl -s -X POST https://bsc-dataseed.bnbchain.org \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_call",
"params":[{"to":"0x55d398326f99059fF775485246999027B3197955","data":"'$DATA'"},"latest"]}'
{"jsonrpc":"2.0","id":1,"result":"0x…0143feb02d6709d2227d9d49"} # uint256 en bruto, divide entre 10^18 decimals() y symbol() en un solo batch
decimals() (0x313ce567) devuelve un uint sin más. symbol() (0x95d89b41) devuelve un string codificado en ABI: un offset de 32 bytes, una longitud de 32 bytes y después los bytes UTF-8. Algunos tokens muy antiguos devuelven un bytes32, así que un decodificador robusto tiene que aceptar ambos formatos.
curl -s -X POST https://bsc-dataseed.bnbchain.org \
-H 'Content-Type: application/json' \
-d '[{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x55d398326f99059fF775485246999027B3197955","data":"0x313ce567"},"latest"]},
{"jsonrpc":"2.0","id":2,"method":"eth_call","params":[{"to":"0x55d398326f99059fF775485246999027B3197955","data":"0x95d89b41"},"latest"]}]'
[{"jsonrpc":"2.0","id":1,"result":"0x…0012"}, # decimals() = 18
{"jsonrpc":"2.0","id":2,"result":"0x…0020 # offset 32
…0004 # longitud 4
5553445400…"}] # "USDT" en UTF-8 Conoce el motivo del revert antes de pagarlo
Un eth_call con campo from simula una transacción sin firmarla. Si fuera a fallar, el nodo te devuelve el mensaje de revert; en este caso, una transferencia de USDT desde una dirección sin saldo. Lánzalo antes de emitir la transacción y nunca pagarás gas por una operación condenada al fracaso.
curl -s -X POST https://bsc-dataseed.bnbchain.org \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{
"from":"0x000000000000000000000000000000000000c0Fe",
"to":"0x55d398326f99059fF775485246999027B3197955",
"data":"0xa9059cbb000000000000000000000000000000000000000000000000000000000000beef0000000000000000000000000000000000000000000000000de0b6b3a7640000"},"latest"]}'
{"error":{"code":3,"message":"execution reverted: BEP20: transfer amount exceeds balance", …}} eth_getLogs: aquí se acaba la barra libre
# Endpoint oficial: desactivado
curl -s -X POST https://bsc-dataseed.bnbchain.org -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_getLogs","params":[{"fromBlock":"latest","toBlock":"latest"}]}'
{"jsonrpc":"2.0","id":1,"error":{"code":-32005,"message":"limit exceeded"}}
# PublicNode: vale para rangos pequeños, p. ej. eventos Transfer de USDT en el último bloque
curl -s -X POST https://bsc-rpc.publicnode.com -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_getLogs","params":[{"fromBlock":"latest","toBlock":"latest",
"address":"0x55d398326f99059fF775485246999027B3197955",
"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}]}' Para historial de eventos que vaya más allá de unos pocos bloques, usa MegaNode o una suscripción por WebSocket, o consulta un indexador como Binplorer, que ya ha procesado esos logs por ti.
Batching en JSON-RPC: menos idas y vueltas, los mismos datos
La especificación JSON-RPC 2.0 —la que resume la documentación de ethereum.org para cualquier cadena EVM— te permite enviar por POST un array de peticiones y recibir un array de respuestas, emparejadas por id. Es la mayor mejora de velocidad que puedes aplicar a tus lecturas en BSC: cargar la página de una transacción exige la transacción, su recibo, el número de bloque actual y el timestamp del bloque, y un batch trae los tres primeros en una sola petición HTTP en lugar de tres. Los endpoints oficiales aceptan hasta 100 llamadas por batch; con 120 recibimos batch length does not support more than 100, mientras que PublicNode aceptó las 120.
Tres reglas mantienen fiables los batches. Empareja las respuestas por id, nunca por posición, porque los proveedores pueden reordenarlas. Trata cada elemento por separado: un eth_call fallido no tumba el batch entero. Y da por hecho que cada elemento cuenta para el límite de peticiones: el batching ahorra latencia, no cuota.
Binplorer y GoPlus: datos indexados sin clave
Un nodo te dice el saldo de ahora mismo; lo que no puede es listar todos los tokens que tiene una wallet ni todas las transferencias que ha hecho, porque para eso hace falta un índice. Binplorer, del equipo que creó Ethplorer, mantiene ese índice para BSC y lo expone con la clave pública freekey. Su documentación de la API limita la clave gratuita a 2 peticiones por segundo, 20 por minuto, 100 por hora, 1.000 al día y 3.000 a la semana: bien para un prototipo o una herramienta personal, no para producción.
curl -s "https://api.binplorer.com/getTokenInfo/0x55d398326f99059fF775485246999027B3197955?apiKey=freekey"
{"address":"0x55d3…7955","name":"Tether","decimals":"18","symbol":"USDT",
"price":{"rate":0.9997, …},"holdersCount": …}
# otros endpoints con freekey (misma URL base)
/getAddressInfo/{address} # saldo de BNB + tokens con precios
/getTxInfo/{hash} # tx decodificada con operaciones de tokens
/getAddressHistory/{address} # transferencias de tokens (&limit=25)
/getAddressTransactions/{address} # transferencias de BNB (&limit=25)
/getTopTokens?limit=10 # tokens BEP-20 más activos
/getLastBlock # altura del índice GoPlus Security responde a otra pregunta: ¿es peligroso este token? Su endpoint gratuito de seguridad de tokens para la cadena 56 detecta honeypots, impuestos de compra y venta, funciones de mint, proxies actualizables, listas negras y propietarios capaces de modificar saldos. Toma una alerta roja como una señal de stop y un resultado limpio como «no hay trampa evidente», no como una garantía. Nuestra guía para verificar un token de BSC explica cada indicador.
curl -s "https://api.gopluslabs.io/api/v1/token_security/56?contract_addresses=0x55d398326f99059fF775485246999027B3197955"
{"code":1,"message":"OK","result":{"0x55d3…7955":{
"buy_tax":"0","sell_tax":"0","is_honeypot":"0","is_open_source":"1",
"is_proxy":"0","is_mintable":"1","owner_change_balance":"0", … }}} BSCTrace vía MegaNode: la opción gratuita con clave
Cuando las fuentes sin clave se te queden cortas, MegaNode de NodeReal —la API que hay detrás del explorador BSCTrace— es el siguiente paso natural. Te registras, creas una clave y tu endpoint pasa a ser https://bsc-mainnet.nodereal.io/v1/<API_KEY> (testnet: bsc-testnet.nodereal.io). El plan gratuito incluye 10 millones de compute units al mes, 150 compute units por segundo, tres API keys, mainnet y testnet, y datos de archivo. Growth cuesta 31 $ al mes con facturación anual, y por encima están los planes Team y Business.
Todo lo que has visto arriba funciona también ahí, y además eth_getLogs, estado histórico y los métodos avanzados de NodeReal: nr_getAssetTransfers para transferencias normales, BEP-20, NFT e internas por dirección, nr_getTokenHolders y nr_getTokenHolderCount, nr_getTokenBalance20 y nr_getContractCreationTransaction. Los detalles de cada método están en la documentación de migración de NodeReal. Guarda la clave en tu servidor, porque viaja en la ruta de la URL.
Tus lecturas por API son gratis. Tus transacciones, no.
Relayers, keepers y wallets de despliegue gastan BNB en gas. Recárgalos desde un exchange asociado regulado que opera desde 2013.
Límites de peticiones y failover: consejos que te salvan a las 3 de la madrugada
Rota los endpoints. Ten una lista ordenada —dos hosts oficiales, PublicNode, 1RPC— y pasa al siguiente ante un timeout, un HTTP 429 o un error JSON-RPC que hable de límites. Recuerda cuál funcionó la última vez y empieza por ese la próxima.
Espera de forma exponencial. Si recibes varias respuestas -32005 o 429 seguidas, espera 1, 2, 4 y 8 segundos antes de reintentar en el mismo host. Machacar un endpoint que ya te está limitando solo alarga el bloqueo.
Cachea lo que nunca cambia. Los decimales y símbolos de los tokens, el bytecode de los contratos y los recibos de bloques finalizados son inmutables. Con una finalidad rápida de alrededor de un segundo en BSC, todo lo que esté unos pocos bloques por debajo se puede cachear para siempre.
Consulta con cabeza. Desde el hard fork Fermi llega un bloque cada 0,45 segundos, pero consultar eth_blockNumber una vez por segundo basta para la mayoría de aplicaciones: 300 peticiones cada cinco minutos, el 3 % de la cuota oficial. Para feeds en tiempo real, usa una suscripción WebSocket newHeads de un proveedor.
Comprueba la cadena. Llama a eth_chainId una vez al arrancar y niégate a continuar si no devuelve 0x38. Es un seguro barato contra una URL de testnet pegada por error.
Llamar a BSC desde el navegador: CORS y claves
Los navegadores solo dejan que una página lea una respuesta de otro origen si el servidor lo permite. Los endpoints oficiales de BNB Chain y PublicNode responden con Access-Control-Allow-Origin: *, y Binplorer y GoPlus devuelven tu propio origen, así que los cuatro funcionan directamente desde JavaScript en el front-end: revisamos las cabeceras. Eso es lo que hace posible un explorador sin backend.
La otra mitad del asunto son los secretos. Nunca metas una clave de Etherscan o de MegaNode en el código del cliente: te la rascarán en cuestión de días. Si necesitas una fuente con clave en el navegador, pon delante un proxy mínimo, una función serverless que añada la clave, permita solo ciertos métodos y cachee respuestas. Y si añades conexión de wallet, recuerda que leer datos nunca requiere una firma; solo emitir una transacción. Nuestra guía para añadir BNB Smart Chain a MetaMask recoge las URL de RPC y de explorador correctas para wallets.
Cómo lee BSC esta web sin ninguna API key
Todo lo que ves en esta web —el explorador, las estadísticas en vivo, el widget de gas— se ejecuta en tu navegador sobre las fuentes descritas arriba. Sin backend, sin claves, sin guardar nada. El núcleo es un cliente JSON-RPC con batching y failover entre cinco endpoints públicos:
// Versión simplificada de la capa de datos de nuestro explorador (src/lib/chain.ts)
const RPCS = ['https://bsc-dataseed.bnbchain.org', 'https://bsc-rpc.publicnode.com',
'https://bsc-dataseed1.bnbchain.org', 'https://1rpc.io/bnb', 'https://bsc.drpc.org'];
async function rpcBatch(calls) {
const body = JSON.stringify(calls.map(([method, params], i) =>
({ jsonrpc: '2.0', id: i + 1, method, params })));
for (const url of RPCS) { // failover, por orden
try {
const res = await fetch(url, { method: 'POST', body,
headers: { 'Content-Type': 'application/json' },
signal: AbortSignal.timeout(9000) }); // timeout de 9 s por endpoint
const arr = [].concat(await res.json());
if (arr.some(x => /limit|rate|exceed/i.test(x?.error?.message ?? '')))
throw new Error('rate limited'); // prueba el siguiente endpoint
const byId = new Map(arr.map(x => [x.id, x]));
return calls.map((_, i) => byId.get(i + 1)?.result ?? null);
} catch { /* siguiente */ }
}
throw new Error('All RPC endpoints failed');
}
// name, symbol, decimals y totalSupply de un token en UNA sola ida y vuelta
const meta = await rpcBatch(['0x06fdde03', '0x95d89b41', '0x313ce567', '0x18160ddd']
.map(data => ['eth_call', [{ to: token, data }, 'latest']])); Alrededor de ese núcleo hay unas cuantas llamadas más sin clave. Una búsqueda de transacción agrupa en un batch eth_getTransactionByHash, eth_getTransactionReceipt y eth_blockNumber, luego decodifica los logs de Transfer y obtiene los metadatos de hasta 40 tokens en un único batch. Los nombres de los métodos salen de un diccionario integrado de selectores habituales, con la base de datos pública de firmas de OpenChain como respaldo. Las páginas de dirección añaden los tokens en cartera y el historial de Binplorer en mainnet, e ignoran el precio de los tokens con menos de 50.000 $ de volumen diario para que los airdrops de spam no inflen los saldos. Las páginas de token añaden el análisis de GoPlus, y el precio de BNB viene de CoinGecko, con Binplorer como plan B. Pruébalo con cualquier hash en nuestro explorador de BSC, o en las redes de testnet y opBNB a través de la página del explorador de opBNB.