Prend en charge les paiements BTC

Bitcoin API : accepter les paiements BTC sans faire tourner de node

Acceptez les paiements BTC via une API REST. Générez des adresses de dépôt, suivez les confirmations, et envoyez des paiements sans faire tourner de full node Bitcoin.

Essai gratuit de 7 jours — sans carte, sans KYC pour commencer Non-custodial — vos clés privées restent sous votre contrôle Les offres démarrent à 49 €/mois (490 €/an) — voir les offres et les limites de débit

Recherchez une Bitcoin API et le premier résultat est la référence RPC de Bitcoin Core. C'est l'interface canonique vers le réseau, et elle suppose que vous exploitiez une full node : installer bitcoind, synchroniser environ plusieurs centaines de gigaoctets de données de chaîne, garder la machine en ligne, et répéter le cycle de mise à jour à chaque version. Pour certains projets, c'est la bonne voie. Si vous voulez accepter des paiements BTC dans votre application, c'est un détour.

La Bitcoin API de Chaingateway est l'alternative REST. Vous créez des wallets et des adresses de dépôt via de simples appels HTTPS, envoyez du BTC avec un seul POST, et recevez un webhook quand des pièces arrivent. C'est une BTC API au sens le plus simple : HTTPS en entrée, JSON en sortie. L'authentification est un jeton Bearer issu d'un essai gratuit de 7 jours — pas de node, pas de KYC pour démarrer.

Bitcoin en REST plutôt qu'en JSON-RPC

Le JSON-RPC de Bitcoin Core veut une node synchronisée avant la première réponse utile. Une API REST veut une clé API. La différence se voit dans votre calendrier : le téléchargement initial des blocs prend des jours sur du matériel typique, et ensuite la node consomme disque et bande passante, et nécessite toujours une surveillance, aussi longtemps que votre produit existe. Notre article sur blockchain API vs. blockchain node compare les deux approches en détail. Faites tourner votre propre node quand vous avez besoin d'un contrôle au niveau des règles sur votre vue du réseau ; utilisez l'API quand les paiements sont l'objectif.

Les appels du quotidien se traduisent proprement dans le modèle REST. Là où une intégration à base de node enveloppe getnewaddress et listtransactions et sonde les changements, l'API assigne des adresses et laisse le webhook faire la surveillance. Les boucles de polling disparaissent, et avec elles les tâches cron qui échouent silencieusement un week-end.

Il existe une seconde différence. Les méthodes RPC brutes retournent des données brutes. Chaingateway retourne du JSON structuré avec des champs lisibles, si bien qu'une réponse peut aller directement dans votre base de données plutôt que passer par une couche de parsing.

Ce dont vous auriez besoin avec le RPC bitcoin-core, côte à côte

La comparaison devient concrète dès qu'on liste le travail réel. Supposons que la tâche soit « donner à chaque client une adresse de dépôt et créditer son compte quand du BTC arrive ».

TâcheAvec Bitcoin Core (JSON-RPC)Avec l'API REST
Prérequisune full node synchronisée : bitcoind plus plusieurs centaines de Go de données de chaîneune clé API
Nouvelle adresse de dépôtgetnewaddress par client, plus un régime de sauvegarde de wallet que vous scriptez vous-mêmePOST /api/v2/bitcoin/wallets/{wallet}/addresses
Détecter du BTC entrantconfigurer walletnotify, ou sonder listsinceblock / gettransaction sur une minuteriePOST de webhook signé vers votre serveur
Envoyer du BTCsendtoaddress, plus un hot wallet dans la node, des réglages de frais et des sauvegardes de fichier wallet que vous possédezPOST /api/v2/bitcoin/transactions
Suivre les confirmationsre-sonder gettransaction jusqu'à ce que le nombre satisfasse votre politiquesonder GET /api/v2/bitcoin/transactions/{txid}/decoded, qui porte le nombre de confirmations
Piste d'auditparser la sortie de listtransactions et dédupliquer dans votre propre codeGET /api/v2/bitcoin/webhooks/notifications
Coût continudisque, bande passante, mises à jour, surveillancele problème du fournisseur

Les paiements sortants méritent un regard plus attentif. sendtoaddress ressemble à un seul appel, mais il présuppose un hot wallet à l'intérieur de votre node, des réglages de frais que vous possédez et une sauvegarde testée du fichier wallet. Même getbalance est plus restreint qu'il n'y paraît : il rapporte le solde du wallet de la node, pas celui d'une adresse arbitraire, si bien que la comptabilité de type exchange atterrit encore dans votre code. Rien de tout cela n'est une critique de Bitcoin Core — c'est le logiciel de référence pour exploiter le réseau et il excelle dans cette tâche. Il n'a jamais été conçu comme backend de paiement d'une application web, ce qui explique pourquoi tant de code colle s'accumule autour.

Envoyer du BTC en REST

Le côté REST du chemin d'envoi tient en trois endpoints. POST /api/v2/bitcoin/wallets crée un wallet, chiffré avec un mot de passe que Chaingateway ne stocke pas — perdez-le et personne ne peut restaurer le wallet, ce qui est précisément l'objectif. POST /api/v2/bitcoin/wallets/{wallet}/addresses dérive autant d'adresses sous lui que nécessaire ; un wallet les porte toutes. Et POST /api/v2/bitcoin/transactions envoie :

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 réponse porte le txid de la transaction diffusée. speed accepte fast, medium ou slow et fixe le niveau de frais — le compromis entre coût et délai jusqu'à la première confirmation. Un subtractfee: true optionnel déduit les frais réseau du montant plutôt que de les ajouter, ce que vous voulez quand un client retire la totalité de son solde.

C'est l'appel d'envoi complet — créez un compte et exécutez-le sur testnet avec votre propre wallet.

Tout ce dont vous avez besoin pour accepter le BTC

Webhooks (IPN)

Notifications de paiement instantanées pour les transactions entrantes, envoyées dès qu'une transaction correspondante se règle on-chain. Définissez un secret personnel dans votre profil et chaque notification porte un en-tête X-Signature que votre serveur peut vérifier. Les livraisons échouées sont listées sous GET /api/v2/bitcoin/webhooks/notifications/failed et peuvent être renvoyées d'un seul appel.

Endpoints REST prévisibles

Créez des adresses et suivez les paiements avec une API propre et cohérente. Les requêtes et réponses ressemblent au reste de la plateforme Chaingateway, si bien qu'un développeur ayant intégré une chaîne lit les réponses Bitcoin sans manuel.

Gestion sécurisée des adresses

Non-custodial par conception, avec validation d'adresse intégrée. Les adresses malformées ou mal saisies échouent avant que quoi que ce soit ne touche la chaîne.

Requêtes décodées

Les données de transaction arrivent en JSON structuré plutôt qu'en hex brut, y compris les montants et l'état de confirmation sur lesquels votre backend agit.

Temps de bloc et confirmations : à quoi s'attendre

Bitcoin ajoute un bloc environ toutes les dix minutes, bien que les écarts individuels varient largement. Chaque nouveau bloc miné par-dessus celui contenant votre transaction ajoute une confirmation, et chaque confirmation rend un renversement plus difficile.

Taille du paiementConfirmations à attendre
Petit, jusqu'à environ 1 000 $1 (environ 10 minutes)
Moyen, jusqu'à environ 10 000 $3 (environ 30 minutes)
Grand6 (environ une heure)
Très grand, au-delà de 1 million $10 ou plus

Six confirmations — environ une heure — sont le standard de facto pour « réglé » depuis les débuts des plateformes d'échange, et cela tient toujours mi-2026.

Dix minutes sont une moyenne, pas un horaire

L'ajustement de difficulté la maintient dans le temps, mais les écarts individuels se dispersent largement autour — deux blocs en une minute arrivent, tout comme des sécheresses de quarante minutes. L'UX de paiement doit en tenir compte : « environ dix minutes » est une moyenne, pas une promesse, donc votre page de checkout devrait dire « généralement dans l'heure » plutôt que faire tourner un compte à rebours qu'elle ne peut pas tenir.

Pourquoi ne pas créditer à zéro confirmation ?

Parce que tant qu'une transaction n'est pas dans un bloc, elle reste dans le mempool, où elle peut être remplacée ou faire l'objet d'une double dépense, et même le bloc le plus récent peut sortir de la chaîne lors d'une réorganisation. L'API scinde ce travail en deux. Le webhook se déclenche une fois la transaction réglée on-chain — le payload porte montant, adresse, txid et numéro de bloc — pour que votre UI puisse réagir immédiatement. À partir de là, GET /api/v2/bitcoin/transactions/{txid}/decoded retourne le nombre de confirmations actuel, si bien que votre registre ne crédite que l'argent ayant atteint votre seuil. Montrez la progression tôt, réglez tard.

UTXO : pourquoi les dépôts Bitcoin diffèrent des chaînes EVM

Bitcoin n'a pas de soldes de compte. Ce que la chaîne stocke, ce sont des unspent transaction outputs — UTXO —, chacun un morceau discret de valeur verrouillé sur une adresse. Le « solde » d'un wallet est un nombre que votre logiciel dérive en additionnant chaque UTXO que ses adresses contrôlent ; le protocole ne stocke jamais cette somme nulle part. Dépenser consomme des UTXO entiers et en crée de nouveaux, y compris une sortie de monnaie rendue vers vous-même, de la même façon que payer une facture de 7 euros avec un billet de 10 euros rend de la monnaie.

Ethereum fonctionne selon le modèle opposé. Un compte a un solde, la chaîne le stocke directement, et un dépôt est un incrément. Sur les chaînes EVM, il est normal de donner une adresse à un client et de laisser une centaine de dépôts s'y accumuler au fil des années.

Pour la gestion des dépôts, le modèle UTXO a un avantage pratique : il vous pousse vers une adresse par client ou par facture, ce qui est de toute façon le design le plus propre. Chaque paiement entrant est une nouvelle sortie vers une adresse que vous surveillez, donc l'attribution est sans ambiguïté — pas de parsing de mémo, pas de correspondance par montant. Cela signifie aussi que « le solde d'une adresse » est une question à laquelle répond un indexeur plutôt que la chaîne elle-même — précisément la comptabilité que vous externalisez en utilisant une API avec des webhooks plutôt qu'en faisant tourner la machinerie vous-même. La notification vous dit : ce montant, cette adresse, cette transaction, ce bloc. Votre registre fait le reste.

Le flux de dépôt, étape par étape

La plupart des intégrations Bitcoin chez Chaingateway se concentrent sur les dépôts : une adresse par client, un webhook par paiement.

  1. Assignez à chaque client une adresse de dépôt depuis votre wallet (POST /api/v2/bitcoin/wallets/{wallet}/addresses).
  2. Le client envoie du BTC.
  3. Une fois la transaction réglée on-chain, Chaingateway POST une notification signée vers votre serveur, portant montant, adresse, txid et numéro de bloc.
  4. Votre backend vérifie la signature et crédite le compte une fois que le nombre de confirmations — lu depuis GET /api/v2/bitcoin/transactions/{txid}/decoded — atteint votre seuil.

Deux notes d'implémentation. La livraison n'est pas exactement-une-fois — une notification échouée que vous renvoyez via l'API arrive à nouveau en entier — rendez donc votre handler idempotent et liez les crédits à l'ID de transaction plutôt que de compter les callbacks. Et les confirmations existent pour une raison : le bloc le plus récent peut toujours être orphelin lors d'une réorg, c'est pourquoi la décision de crédit doit dépendre du nombre de confirmations, pas du webhook seul.

Il est utile de modéliser chaque dépôt comme une petite machine à états plutôt qu'un booléen. Une commande démarre à awaiting_payment, passe à detected quand le webhook se déclenche, avance via confirming pendant que votre poller surveille le nombre de confirmations, et atterrit sur settled une fois le seuil atteint — avec underpaid et expired comme sorties latérales explicites. Des clients qui envoient 0,00095 BTC contre une facture de 0,001 BTC existent, généralement parce que leur wallet a déduit les frais réseau du montant saisi ; décidez à l'avance si votre tolérance absorbe le manque ou si la commande attend un complément. Et donnez une expiration aux factures. Les taux de change bougent, donc une adresse qui correspondait au montant de la facture lundi ne devrait pas se régler à un prix obsolète la semaine suivante.

Pour l'audit et la réconciliation, chaque notification reçue par votre compte peut être listée via l'API :

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

Testnet d'abord

Ajoutez l'en-tête X-Network: testnet et chaque appel de cette page tourne contre le réseau de test de Bitcoin : mêmes routes, mêmes formes de réponse, pièces sans valeur. Les faucets distribuent gratuitement du BTC de test, si bien que tout le flux de dépôt — adresse, paiement, webhook, confirmations — peut être répété de bout en bout sans dépenser un satoshi.

Gardez l'en-tête derrière la configuration plutôt que dispersé dans le code, et donnez à votre environnement de staging une URL de callback séparée pour que les dépôts de test ne puissent pas fuiter dans le registre de production. Quand la répétition fonctionne, retirez l'en-tête. Rien d'autre ne change dans l'intégration, ce qui est le but : le premier dépôt mainnet devrait être ennuyeux.

Quand quelque chose échoue

Un backend de paiement gagne sa place dans les mauvais jours, planifiez donc explicitement les chemins d'échec.

Au niveau HTTP, les règles sont du REST standard. Un 401 signifie que le jeton Bearer est faux ou manquant ; corrigez la clé plutôt que de réessayer. Les autres réponses 4xx pointent vers la requête elle-même — loguez le corps, qui nomme le problème, et traitez-le comme un bug. Les réponses dans la plage 5xx et les timeouts sont transitoires ; réessayez-les avec un backoff.

Les modes d'échec spécifiques à Bitcoin vivent au-dessus de HTTP. Un dépôt qui ne confirme jamais a généralement payé trop peu de frais et reste coincé dans le mempool ; il peut confirmer des heures plus tard ou disparaître entièrement, c'est pourquoi detected et settled doivent rester des états séparés dans votre système. Une notification pour un montant inférieur à la facture est une décision métier, pas une erreur — gérez-la dans le code, pas dans une file de support. Et si votre endpoint webhook était en panne, les livraisons échouées vous attendent : GET /api/v2/bitcoin/webhooks/notifications/failed les liste, POST /api/v2/bitcoin/webhooks/notifications/{id}/retry renvoie chacune, et la liste complète sous GET /api/v2/bitcoin/webhooks/notifications vous permet de comparer avec le registre et de combler les écarts. Faites tourner cette comparaison chaque nuit même quand rien ne semble anormal. Une réconciliation qui ne tourne qu'après des incidents trouve ses bugs en production.

Besoin de stablecoins à côté du BTC ?

Bitcoin lui-même n'a pas d'USDT ni d'USDC — les stablecoins vivent sur d'autres chaînes. Ce que la plateforme partagée vous donne, c'est une longueur d'avance : votre intégration Bitcoin parle déjà la même API que nos endpoints Ethereum et TRON. Acceptez le BTC aujourd'hui, ajoutez l'USDT sur TRON au prochain sprint avec la même clé et le même handler de webhook. L'aperçu de la blockchain API liste les sept chaînes supportées.

L'ordre pratique pour la plupart des équipes : lancer d'abord les dépôts BTC, car c'est ce que les clients demandent nommément, puis laisser les données de paiement indiquer quel rail stablecoin ajouter en second. Chez Chaingateway, ce second rail réutilise votre vérification de signature, votre tâche de réconciliation et votre machine à états de dépôt sans changement.

Pourquoi les développeurs construisent sur Bitcoin

  • Il a le plus long historique de toutes les blockchains, en fonctionnement depuis 2009, et la reconnaissance la plus large parmi les utilisateurs finaux.
  • Le réseau règle en continu. Il n'y a ni horaires bancaires ni coupures régionales.
  • Les confirmations suivent un rythme prévisible, avec un nouveau bloc environ toutes les dix minutes, ce qui garde les flux de paiement faciles à raisonner.
  • L'adoption est la plus large de tous les réseaux crypto, donc « acceptez-vous Bitcoin ? » reste la première question que posent les clients.

Aucune de ces propriétés ne vient d'une mise à jour de roadmap ; ce sont les mêmes garanties avec lesquelles le réseau a été livré. Cette stabilité est l'argument en faveur du BTC dans les produits à long horizon : une intégration construite cette année ne sera pas rendue obsolète par un virage de protocole l'année prochaine, ce qui est plus que ce que peuvent prétendre la plupart des piles de paiement.

Conçu pour des cas d'usage de paiement réels

Le cas évident est le checkout : un client choisit Bitcoin et votre app assigne une adresse ; le webhook confirme le paiement. Les mêmes briques portent aussi des charges plus lourdes. Les plateformes d'échange et de gaming font tourner une adresse de dépôt par utilisateur et créditent les soldes à la confirmation. Les flux de paiement et d'envoi de fonds poussent des transferts transfrontaliers sans banques correspondantes au milieu. Les entreprises par abonnement génèrent une nouvelle adresse de facture à chaque cycle et laissent le webhook la clôturer.

Ce que ces cas partagent, c'est la forme du travail. Bitcoin gère le règlement ; votre application gère l'état. L'API se situe entre les deux et transforme les événements on-chain en appels HTTP que votre framework sait déjà router — c'est pourquoi le cas du checkout et le cas de la plateforme d'échange tournent sur la même poignée d'endpoints.

Intégration en trois étapes

Step 1

Obtenez votre clé API. L'inscription est gratuite et l'essai démarre sans KYC.

Step 2

Effectuez votre première requête. Confirmez la clé avec GET /api/account, puis créez un wallet et vos adresses de dépôt.

Step 3

Configurez les webhooks et passez en production. Pointez les notifications vers votre endpoint, vérifiez la signature HMAC, puis retirez l'en-tête X-Network: testnet — le code identique tourne sur mainnet.

Ce qui fonctionne sur quelle chaîne

Bitcoin est la seule ligne sans colonne de transfert de token : la chaîne n'a pas de standard de token, donc le BTC natif passe par son propre modèle de wallet plutôt que par un appel de type ERC-20. Voici comment elle se positionne face aux six autres chaînes.

ChaîneAdressesTransferts de tokensWebhooks de dépôt
BitcoinPOST /api/v2/bitcoin/wallets/{wallet}/addresses— (pas de standard 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 et TRC-10 : POST /api/v2/tron/transactions/trc20 et .../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

Deux notes de bas de page pour bien lire le tableau. D'abord : TRON est l'intégration la plus complète de la plateforme. Au-delà des routes ci-dessus, la référence documente le staking (POST /api/v2/tron/freeze et /delegate), les paramètres de chaîne, et une paire d'auto-signature — /transactions/trc20/build pour construire une transaction et /transactions/broadcast pour en soumettre une que vous avez signée localement. Si votre équipe conformité insiste pour que les clés privées ne quittent jamais vos serveurs, ce schéma build-and-broadcast est votre porte d'entrée.

Ensuite : un tiret signifie que la référence actuelle ne documente pas de route v2 pour cette cellule, pas que le réseau est de seconde classe. Bitcoin n'a pas de standard de token, d'où la cellule token vide — le BTC natif passe plutôt par son propre modèle de wallet : créer un wallet chiffré par mot de passe avec POST /api/v2/bitcoin/wallets, dériver des adresses de dépôt en dessous, et envoyer avec POST /api/v2/bitcoin/transactions. La référence de Solana couvre la création d'adresse, les transferts SOL et SPL, et les recherches de solde et de bloc, mais pas encore les webhooks. Pour tout ce qui n'est pas listé ici, la référence API a l'état actuel.

Questions fréquentes

Oui. Cela fonctionne comme une API de paiement Bitcoin : générez une adresse de dépôt par client, enregistrez un webhook, et créditez la commande une fois le BTC entrant confirmé, sans faire tourner de full node ni utiliser de custodian. Les paiements sortants passent par POST /api/v2/bitcoin/transactions. Toute la boucle accepter-et-régler tourne en REST.

Les wallets sont protégés par mot de passe et stockés chiffrés, et l'architecture est non-custodial : sans vos identifiants, les fonds ne peuvent pas être déplacés.

Non. Chaingateway exploite l'infrastructure ; votre application parle HTTPS. Si vous pesez une node auto-hébergée contre l'API, notre comparaison de nodes couvre honnêtement le volet maintenance.

Oui. Ajoutez X-Network: testnet à n'importe quelle requête et elle tourne contre le réseau de test, avec les mêmes endpoints et formats de réponse mais des pièces sans valeur.

Cela dépend de votre tolérance au risque. Le webhook vous dit que le paiement s'est réglé ; le nombre de confirmations actuel provient de GET /api/v2/bitcoin/transactions/{txid}/decoded. Vous fixez donc le seuil par montant : une petite commande peut être expédiée après la première confirmation, un retrait important après plusieurs. La section sur les temps de bloc ci-dessus liste les seuils que la plupart des plateformes utilisent.

Les blocs arrivent en moyenne environ toutes les dix minutes, avec une large variance dans les deux sens. Une transaction avec des frais suffisants atteint sa première confirmation après dix minutes en moyenne ; le standard classique de six confirmations prend environ une heure. Le niveau de frais compte aussi : une transaction qui sous-paie pendant une période chargée attend plus longtemps son premier bloc, parfois des heures.

Une réorganisation remplace le ou les blocs les plus récents par une chaîne concurrente, et toute transaction qui n'existait que dans les blocs remplacés redevient en attente. Les réorgs d'un seul bloc sont rares et les plus profondes encore plus rares, mais elles sont la raison d'être des seuils de confirmation. Créditez seulement après votre seuil et les réorgs restent une statistique, pas un incident.

L'attribution. Sur une adresse partagée, vous devez faire correspondre les paiements aux clients par montant ou timing, ce qui échoue le jour où deux factures totalisent la même somme. Une adresse dédiée rend chaque sortie entrante auto-identifiante, et puisque les adresses ne coûtent rien à créer, il n'y a aucune raison d'économiser dessus.

Un processeur prend généralement la garde des fonds, règle plus tard et exige un KYC avant les paiements sortants. Chaingateway est une API par-dessus la chaîne elle-même : les dépôts atterrissent sur des adresses liées à votre propre wallet, et ce qui se passe ensuite relève de votre code. Vous obtenez les briques brutes, pas un checkout à l'avis tranché.

Oui. La même API couvre Ethereum, TRON, Solana, BNB Smart Chain, Polygon et Arbitrum. Les routes ne diffèrent que par le segment de chaîne dans le chemin.

Les forfaits et leurs limites sont listés sur la page de tarification. Chaque forfait démarre avec l'essai gratuit de 7 jours. Le moyen le plus rapide d'évaluer est une exécution en testnet. Créez un compte et pointez un webhook vers un request bin. Envoyez-vous du BTC de test ; si le flux convient, mainnet n'est qu'un en-tête plus loin.

Prêt à accepter des paiements Bitcoin ?

Créez un compte sur app.chaingateway.io/register, créez un wallet et envoyez un transfert BTC testnet. La référence complète des endpoints est dans la documentation, et les forfaits et limites de débit ont leur propre page.