Soporta pagos en BTC

Bitcoin API: Acepta Pagos en BTC Sin Ejecutar un Node

Acepta pagos en BTC mediante una API REST. Genera direcciones de depósito, sigue las confirmaciones, y envía pagos sin ejecutar un full node de Bitcoin.

Prueba gratuita de 7 días — sin tarjeta ni KYC para empezar Non-custodial — las claves privadas permanecen bajo su control Los planes comienzan en 49 €/mes (490 €/año) — ver planes y rate limits

Busca una Bitcoin API y el primer resultado es la referencia RPC de Bitcoin Core. Es la interfaz canónica hacia la red, y presupone que operas un full node: instalar bitcoind, sincronizar aproximadamente varios cientos de gigabytes de datos de la chain, mantener la máquina en línea, y repetir el ciclo de actualización en cada versión. Para algunos proyectos ese es el camino correcto. Si quieres aceptar pagos en BTC en tu aplicación, es un desvío.

La Bitcoin API de Chaingateway es la alternativa REST. Creas wallets y direcciones de depósito por HTTPS sencillo, envías BTC con un único POST, y recibes un webhook cuando llegan monedas. Es una BTC API en el sentido más simple: HTTPS que entra, JSON que sale. La autenticación es un Bearer token de una prueba gratuita de 7 días — sin node, sin KYC para empezar.

Bitcoin sobre REST en lugar de JSON-RPC

El JSON-RPC de Bitcoin Core quiere un nodo sincronizado antes de la primera respuesta útil. Una REST API quiere una API key. La diferencia se nota en tu calendario: la descarga inicial del bloque tarda días en hardware típico, y después el nodo consume disco y ancho de banda, y sigue necesitando monitorización, durante todo el tiempo que viva tu producto. Nuestro artículo sobre blockchain API vs. blockchain node compara ambos enfoques en detalle. Ejecuta tu propio nodo cuando necesites control a nivel de política sobre tu visión de la red; usa la API cuando el objetivo sean los pagos.

Las llamadas del día a día se ajustan limpiamente al modelo REST. Donde una integración de nodo envuelve getnewaddress y listtransactions y hace polling en busca de cambios, la API asigna direcciones y deja que el webhook se encargue de vigilar. Los bucles de polling desaparecen, y con ellos los cron jobs que se rompen en silencio un fin de semana.

Hay una segunda diferencia. Los métodos RPC en bruto devuelven datos en bruto. Chaingateway devuelve JSON estructurado con campos legibles, así que una respuesta puede ir directamente a tu base de datos en lugar de pasar por una capa de parseo.

Lo que necesitarías con bitcoin-core RPC, lado a lado

La comparación se vuelve concreta en cuanto se lista el trabajo real. Supongamos que el trabajo es "dar a cada cliente una dirección de depósito y acreditar su cuenta cuando llega BTC".

TareaCon Bitcoin Core (JSON-RPC)Con la REST API
Requisito previoun full node sincronizado: bitcoind más varios cientos de GB de datos de la chainuna API key
Nueva dirección de depósitogetnewaddress por cliente, más un régimen de backup de wallet que escribes tú mismoPOST /api/v2/bitcoin/wallets/{wallet}/addresses
Detectar BTC entranteconfigurar walletnotify, o hacer polling a listsinceblock / gettransaction con un temporizadorPOST firmado del webhook a tu servidor
Enviar BTCsendtoaddress, más una hot wallet dentro del nodo, configuración de comisiones y backups del archivo de wallet que gestionas túPOST /api/v2/bitcoin/transactions
Seguir confirmacionesvolver a hacer polling a gettransaction hasta que el recuento cumpla tu políticahacer polling a GET /api/v2/bitcoin/transactions/{txid}/decoded, que lleva el recuento de confirmaciones
Rastro de auditoríaparsear la salida de listtransactions y deduplicar en tu propio códigoGET /api/v2/bitcoin/webhooks/notifications
Coste continuodisco, ancho de banda, actualizaciones, monitorizaciónes problema del proveedor

Los pagos salientes merecen una mirada más de cerca. sendtoaddress parece una sola llamada, pero presupone una hot wallet dentro de tu nodo, una configuración de comisiones que gestionas tú y una copia de seguridad probada del archivo de wallet. Incluso getbalance es más limitado de lo que parece: informa del saldo de la wallet del nodo, no de una dirección arbitraria, así que la contabilidad estilo exchange sigue recayendo en tu código. Nada de esto es una crítica a Bitcoin Core — es el software de referencia para operar la red y es bueno en ese trabajo. Nunca pretendió ser el backend de pagos de una aplicación web, razón por la cual se acumula tanto código de pegamento a su alrededor.

Enviar BTC vía REST

El lado REST de la ruta de envío son tres endpoints. POST /api/v2/bitcoin/wallets crea una wallet, cifrada con una contraseña que Chaingateway no almacena — piérdela y nadie puede restaurar la wallet, que es precisamente el objetivo. POST /api/v2/bitcoin/wallets/{wallet}/addresses deriva tantas direcciones bajo ella como necesites; una wallet las lleva todas. Y POST /api/v2/bitcoin/transactions envía:

curl -X POST https://app.chaingateway.io/api/v2/bitcoin/transactions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
    "amount": 0.0015,
    "walletname": "treasury",
    "password": "wallet-password",
    "speed": "medium"
  }'

La respuesta lleva el txid de la transacción transmitida. speed acepta fast, medium o slow y fija el nivel de comisión — la disyuntiva entre coste y tiempo hasta la primera confirmación. Un subtractfee: true opcional deduce la comisión de red del importe en lugar de añadirla encima, que es lo que quieres cuando un cliente retira todo su saldo.

Esa es la llamada de envío completa — crea una cuenta y ejecútala en testnet con tu propia wallet.

Todo lo que necesitas para aceptar BTC

Webhooks (IPN)

Notificaciones instantáneas de pago para transacciones entrantes, enviadas en cuanto una transacción coincidente se liquida on-chain. Fija un secreto personal en tu perfil y cada notificación llevará una cabecera X-Signature que tu servidor puede verificar. Las entregas que fallaron se listan en GET /api/v2/bitcoin/webhooks/notifications/failed y se pueden reenviar con una sola llamada.

Endpoints REST predecibles

Crea direcciones y sigue pagos con una API limpia y consistente. Las solicitudes y respuestas se parecen al resto de la plataforma Chaingateway, así que un desarrollador que ya integró una chain lee las respuestas de Bitcoin sin necesidad de manual.

Manejo seguro de direcciones

Non-custodial por diseño, con validación de direcciones integrada. Las direcciones malformadas o mal escritas fallan antes de que nada toque la chain.

Consultas decodificadas

Los datos de transacción llegan como JSON estructurado en lugar de hex en bruto, incluidos los importes y el estado de confirmación sobre los que actúa tu backend.

Tiempos de bloque y confirmaciones: qué esperar

Bitcoin añade un bloque aproximadamente cada diez minutos, aunque los intervalos individuales varían mucho. Cada bloque nuevo minado sobre el que contiene tu transacción añade una confirmación, y cada confirmación hace la reversión más difícil.

Tamaño del pagoConfirmaciones a esperar
Pequeño, hasta unos 1.000 $1 (unos 10 minutos)
Mediano, hasta unos 10.000 $3 (unos 30 minutos)
Grande6 (aproximadamente una hora)
Muy grande, más de 1 millón $10 o más

Seis confirmaciones — aproximadamente una hora — ha sido el estándar de facto para "liquidado" desde los primeros días de los exchanges, y sigue siendo así a mediados de 2026.

Diez minutos es un promedio, no un horario

El ajuste de dificultad lo mantiene a lo largo del tiempo, pero los intervalos individuales se dispersan mucho a su alrededor — dos bloques en un minuto suceden, y también sequías de cuarenta minutos. La experiencia de usuario en pagos tiene que respetar esto: "unos diez minutos" es un promedio, no una promesa, así que tu página de checkout debería decir "normalmente en menos de una hora" en lugar de mostrar un temporizador de cuenta regresiva que no puede cumplir.

¿Por qué no acreditar con cero confirmaciones?

Porque hasta que una transacción está en un bloque, permanece en el mempool, donde puede ser reemplazada o gastada doblemente, e incluso el bloque más reciente puede salir de la chain en una reorganización. La API divide ese trabajo en dos. El webhook se dispara una vez que la transacción se liquida on-chain — el payload lleva importe, dirección, txid y número de bloque — así que tu interfaz puede reaccionar de inmediato. A partir de ahí, GET /api/v2/bitcoin/transactions/{txid}/decoded devuelve el recuento de confirmaciones actual, así que tu contabilidad solo acredita dinero que ha alcanzado tu umbral. Muestra el progreso pronto, liquida tarde.

UTXOs: por qué los depósitos de Bitcoin difieren de las EVM chains

Bitcoin no tiene saldos de cuenta. Lo que la chain almacena son unspent transaction outputs — UTXOs — cada uno un bulto discreto de valor bloqueado a una dirección. El "saldo" de una wallet es un número que tu software deriva sumando cada UTXO que controlan sus direcciones; el protocolo nunca almacena esa suma en ningún sitio. Gastar consume UTXOs enteros y crea otros nuevos, incluida una salida de cambio de vuelta a ti mismo, de la misma forma en que pagar una factura de 7 euros con un billete de 10 devuelve monedas.

Ethereum funciona con el modelo opuesto. Una cuenta tiene un saldo, la chain lo almacena directamente, y un depósito es un incremento. En las EVM chains es normal dar a un cliente una única dirección y dejar que se acumulen cien depósitos sobre ella a lo largo de los años.

Para el manejo de depósitos, el modelo UTXO tiene una ventaja práctica: te empuja hacia una dirección por cliente o por factura, que es de todas formas el diseño más limpio. Cada pago entrante es una salida nueva hacia una dirección que observas, así que la atribución es inequívoca — sin parsear memos, sin emparejar por importe. También significa que "el saldo de una dirección" es una pregunta que responde un indexador y no la chain, que es precisamente la contabilidad que subcontratas al usar una API con webhooks en lugar de ejecutar la maquinaria tú mismo. La notificación te dice: este importe, esta dirección, esta transacción, este bloque. El resto lo hace tu contabilidad.

El flujo de depósito, paso a paso

La mayoría de integraciones de Bitcoin en Chaingateway giran en torno a los depósitos: una dirección por cliente, un webhook por pago.

  1. Asigna a cada cliente una dirección de depósito de tu wallet (POST /api/v2/bitcoin/wallets/{wallet}/addresses).
  2. El cliente envía BTC.
  3. Una vez que la transacción se liquida on-chain, Chaingateway envía por POST una notificación firmada a tu servidor, con importe, dirección, txid y número de bloque.
  4. Tu backend verifica la firma y acredita la cuenta una vez que el recuento de confirmaciones — leído de GET /api/v2/bitcoin/transactions/{txid}/decoded — alcanza tu umbral.

Dos notas de implementación. La entrega no es exactamente-una-vez — una notificación fallida que reenvías a través de la API llega de nuevo completa — así que haz que tu manejador sea idempotente y basa los créditos en el ID de transacción en lugar de contar callbacks. Y las confirmaciones existen por una razón: el bloque más reciente todavía puede quedar huérfano en una reorg, razón por la cual la decisión de acreditar pertenece al recuento de confirmaciones, no solo al webhook.

Ayuda modelar cada depósito como una pequeña máquina de estados en lugar de un booleano. Un pedido empieza en awaiting_payment, pasa a detected cuando se dispara el webhook, avanza a través de confirming mientras tu poller vigila el recuento de confirmaciones, y aterriza en settled una vez alcanzado el umbral — con underpaid y expired como salidas laterales explícitas. Existen clientes que envían 0,00095 BTC contra una factura de 0,001 BTC, normalmente porque su wallet dedujo la comisión de red del importe introducido; decide de antemano si tu tolerancia absorbe la diferencia o el pedido espera una recarga. Y da a las facturas una caducidad. Los tipos de cambio se mueven, así que una dirección que coincidía con el importe de la factura el lunes no debería liquidarse a un precio obsoleto la semana siguiente.

Para auditoría y conciliación, cada notificación que ha recibido tu cuenta se puede listar a través de la API:

cURL
curl https://app.chaingateway.io/api/v2/bitcoin/webhooks/notifications \
  -H "Authorization: Bearer YOUR_API_KEY"

Primero testnet

Añade la cabecera X-Network: testnet y cada llamada de esta página se ejecuta contra la red de pruebas de Bitcoin: mismas rutas, mismas formas de respuesta, monedas sin valor. Los faucets reparten BTC de prueba gratis, así que todo el flujo de depósito — dirección, pago, webhook, confirmaciones — se puede ensayar de principio a fin sin gastar un satoshi.

Mantén la cabecera detrás de la configuración en lugar de esparcida por el código, y da a tu entorno de staging una URL de callback separada para que los depósitos de prueba no puedan filtrarse a la contabilidad de producción. Cuando el ensayo funcione, elimina la cabecera. Nada más de la integración cambia, que es la clave: el primer depósito en mainnet debería ser aburrido.

Cuando algo falla

Un backend de pagos se gana el sueldo en los días malos, así que planifica las rutas de fallo de forma explícita.

En la capa HTTP las reglas son las de REST estándar. Un 401 significa que el Bearer token está mal o ausente; corrige la key en lugar de reintentar. Otras respuestas 4xx apuntan a la solicitud en sí — registra el cuerpo, que nombra el problema, y trátalo como un error, no como algo que reintentar. Las respuestas en el rango 5xx y los timeouts son transitorios; reintenta esos con backoff.

Los modos de fallo específicos de Bitcoin viven por encima de HTTP. Un depósito que nunca confirma normalmente pagó muy poca comisión y está atascado en el mempool; puede confirmar horas después o desaparecer por completo, razón por la cual detected y settled deben permanecer como estados separados en tu sistema. Una notificación por un importe inferior a la factura es una decisión de negocio, no un error — gestiónala en código, no en una cola de soporte. Y si tu endpoint de webhook estuvo caído, las entregas fallidas te esperan: GET /api/v2/bitcoin/webhooks/notifications/failed las lista, POST /api/v2/bitcoin/webhooks/notifications/{id}/retry reenvía cada una, y la lista completa en GET /api/v2/bitcoin/webhooks/notifications te permite comparar con la contabilidad y acreditar las brechas. Ejecuta esa comparación cada noche aunque nada parezca ir mal. Una conciliación que solo se ejecuta tras un incidente encuentra sus errores en producción.

¿Necesitas stablecoins junto a BTC?

Bitcoin en sí no tiene USDT ni USDC — las stablecoins viven en otras chains. Lo que la plataforma compartida te da es una ventaja: tu integración de Bitcoin ya habla la misma API que nuestros endpoints de Ethereum y TRON. Acepta BTC hoy, añade USDT en TRON el próximo sprint con la misma key y el mismo manejador de webhook. La visión general de la blockchain API lista las siete chains soportadas.

El orden práctico para la mayoría de equipos: lanza primero los depósitos en BTC, porque eso es lo que los clientes piden por nombre, y luego deja que los datos de pago te digan qué riel de stablecoin añadir en segundo lugar. En Chaingateway, ese segundo riel reutiliza tu verificación de firma, tu trabajo de conciliación y tu máquina de estados de depósito sin cambios.

Por qué los desarrolladores construyen sobre Bitcoin

  • Tiene el historial más largo de cualquier blockchain, en funcionamiento desde 2009, y el mayor reconocimiento entre los usuarios finales.
  • La red liquida las 24 horas. No hay horario bancario ni cortes regionales.
  • Las confirmaciones siguen un ritmo predecible, con un bloque nuevo aproximadamente cada diez minutos, lo cual mantiene fáciles de razonar los flujos de pago.
  • La adopción es la mayor de todas las redes cripto, así que "¿aceptáis Bitcoin?" sigue siendo la primera pregunta que hacen los clientes.

Ninguna de estas propiedades salió de una actualización de roadmap; son las mismas garantías con las que se lanzó la red. Esa estabilidad es el argumento a favor de BTC en productos con horizontes largos: una integración construida este año no quedará obsoleta por un giro de protocolo el año que viene, que es más de lo que puede decir la mayoría de las pilas de pago.

Construido para casos de uso de pago reales

El caso obvio es el checkout: un cliente elige Bitcoin y tu aplicación asigna una dirección; el webhook confirma el pago. Los mismos bloques de construcción soportan también cargas más pesadas. Los exchanges y las plataformas de gaming ejecutan una dirección de depósito por usuario y acreditan saldos al confirmar. Los flujos de pago y remesas empujan transferencias transfronterizas sin bancos corresponsales en medio. Los negocios de suscripción generan una dirección de factura nueva cada ciclo y dejan que el webhook la cierre.

Lo que comparten estos casos es la forma del trabajo. Bitcoin gestiona la liquidación; tu aplicación gestiona el estado. La API se sitúa entre ambos y convierte eventos de la chain en llamadas HTTP que tu framework ya sabe enrutar — razón por la cual el caso del checkout y el del exchange se ejecutan con el mismo puñado de endpoints.

Integración en tres pasos

Step 1

Obtén tu API key. El registro es gratis y la prueba empieza sin KYC.

Step 2

Haz tu primera solicitud. Confirma la key con GET /api/account, luego crea una wallet y tus direcciones de depósito.

Step 3

Configura webhooks y sal a producción. Apunta las notificaciones a tu endpoint, verifica la firma HMAC, luego elimina la cabecera X-Network: testnet — el mismo código se ejecuta en mainnet.

Qué funciona en cada chain

Bitcoin es la única fila sin columna de transferencia de tokens: la chain no tiene estándar de token, así que el BTC nativo funciona con su propio modelo de wallet en lugar de una llamada estilo ERC-20. Así se compara con las otras seis chains.

ChainDireccionesTransferencias de tokensWebhooks de depósito
BitcoinPOST /api/v2/bitcoin/wallets/{wallet}/addresses— (sin estándar de token)GET /api/v2/bitcoin/webhooks/notifications
EthereumPOST /api/v2/ethereum/addresses/importERC-20: POST /api/v2/ethereum/transactions/erc20GET /api/v2/ethereum/webhooks/notifications
TRONPOST /api/v2/tron/addresses/importTRC-20 y TRC-10: POST /api/v2/tron/transactions/trc20 y .../trc10GET /api/v2/tron/webhooks/notifications
SolanaPOST /api/v2/solana/addressesSPL: POST /api/v2/solana/transactions/SPL
BNB Smart ChainPOST /api/v2/bsc/addresses/importBEP-20: POST /api/v2/bsc/transactions/bep20GET /api/v2/bsc/webhooks/notifications
PolygonPOST /api/v2/polygon/addresses/importERC-20: POST /api/v2/polygon/transactions/erc20GET /api/v2/polygon/webhooks/notifications
ArbitrumPOST /api/v2/arbitrum/addresses/importERC-20: POST /api/v2/arbitrum/transactions/erc20GET /api/v2/arbitrum/webhooks/notifications

Dos notas al pie para leer bien la tabla. Primero: TRON es la integración más profunda de la plataforma. Más allá de las rutas anteriores, la documentación cubre staking (POST /api/v2/tron/freeze y /delegate), parámetros de la chain, y un par de auto-firma — /transactions/trc20/build para construir una transacción y /transactions/broadcast para enviar una que hayas firmado localmente. Si tu equipo de cumplimiento insiste en que las private keys nunca salgan de tus servidores, ese patrón de construir y transmitir es tu vía de entrada.

Segundo: un guion significa que la documentación actual no recoge una ruta v2 para esa celda, no que la red sea de segunda categoría. Bitcoin no tiene estándar de token, de ahí la celda de token vacía — el BTC nativo funciona con su propio modelo de wallet en su lugar: crea una wallet cifrada con contraseña con POST /api/v2/bitcoin/wallets, deriva direcciones de depósito bajo ella, y envía con POST /api/v2/bitcoin/transactions. La documentación de Solana cubre creación de direcciones, transferencias de SOL y SPL, y consultas de saldo y bloque, pero aún sin webhooks. Para cualquier cosa no listada aquí, la referencia de la API tiene el estado actual.

Preguntas frecuentes

Sí. Esto funciona como una API de pagos en Bitcoin: genera una dirección de depósito por cliente, registra un webhook, y acredita el pedido una vez que el BTC entrante confirma, sin ejecutar un full node ni usar un custodio. Los pagos salen a través de POST /api/v2/bitcoin/transactions. Todo el ciclo de aceptar y liquidar funciona vía REST.

Las wallets están protegidas con contraseña y se almacenan cifradas, y la arquitectura es non-custodial: sin tus credenciales, los fondos no se pueden mover.

No. Chaingateway opera la infraestructura; tu aplicación habla HTTPS. Si estás sopesando un nodo autoalojado frente a la API, nuestra comparación de nodos cubre el lado del mantenimiento con honestidad.

Sí. Añade X-Network: testnet a cualquier solicitud y se ejecuta contra la red de pruebas, con los mismos endpoints y formatos de respuesta pero monedas sin valor.

Depende de tu tolerancia al riesgo. El webhook te dice que el pago se liquidó; el recuento de confirmaciones actual viene de GET /api/v2/bitcoin/transactions/{txid}/decoded. Así que fijas el umbral por importe: un pedido pequeño podría enviarse tras la primera confirmación, un retiro grande tras varias. La sección de tiempos de bloque anterior lista los umbrales que usa la mayoría de plataformas.

Los bloques llegan aproximadamente cada diez minutos de media, con una varianza amplia en ambas direcciones. Una transacción con comisión suficiente alcanza su primera confirmación tras diez minutos de media; el estándar clásico de seis confirmaciones tarda aproximadamente una hora. El nivel de comisión también importa: una transacción que paga de menos durante un período de mucha actividad espera más para su primer bloque, a veces horas.

Una reorganización reemplaza el bloque o bloques más recientes por una chain competidora, y cualquier transacción que existiera solo en los bloques reemplazados vuelve a estar pendiente. Las reorgs de un solo bloque son raras y las más profundas aún más, pero son la razón por la que existen los umbrales de confirmación. Acredita solo después de tu umbral y las reorgs quedan como una estadística, no un incidente.

Atribución. En una dirección compartida tienes que emparejar pagos con clientes por importe u horario, lo cual se rompe el día en que dos facturas suman lo mismo. Una dirección dedicada hace que cada salida entrante se identifique a sí misma, y como las direcciones no cuestan nada crear, no hay razón para economizar en ellas.

Un procesador normalmente toma custodia de los fondos, liquida más tarde y exige KYC antes de los pagos. Chaingateway es una API sobre la propia chain: los depósitos caen en direcciones ligadas a tu propia wallet, y lo que pasa después es decisión de tu código. Obtienes los bloques de construcción en bruto, no un checkout con opiniones ya tomadas.

Sí. La misma API cubre Ethereum, TRON, Solana, BNB Smart Chain, Polygon y Arbitrum. Las rutas difieren solo en el segmento de chain de la ruta.

Los planes y sus límites están listados en la página de precios. Todos los planes empiezan con la prueba gratuita de 7 días. La forma más rápida de evaluarlo es una ejecución en testnet. Crea una cuenta y apunta un webhook a un request bin. Envíate BTC de prueba a ti mismo; si el flujo encaja, mainnet está a una cabecera de distancia.

¿Listo para aceptar pagos en Bitcoin?

Crea una cuenta en app.chaingateway.io/register, crea una wallet y envía una transferencia de BTC de testnet. La referencia completa de endpoints está en la documentación, y planes y límites de tasa tienen su propia página.