Bitcoin API: accetta pagamenti BTC senza gestire un node
Accetta pagamenti BTC con un'API REST. Genera indirizzi di deposito, monitora le conferme, e invia payout senza gestire un full node Bitcoin.
Cerca una Bitcoin API e il primo risultato è il riferimento RPC di Bitcoin Core. È l'interfaccia canonica verso la rete, e presuppone che tu gestisca un full node: installare bitcoind, sincronizzare all'incirca diverse centinaia di gigabyte di dati della chain, mantenere la macchina online, e ripetere il ciclo di aggiornamento a ogni release. Per alcuni progetti quella è la strada giusta. Se vuoi accettare pagamenti BTC nella tua applicazione, è una deviazione.
La Bitcoin API di Chaingateway è l'alternativa REST. Crei wallet e indirizzi di deposito su semplice HTTPS, invii BTC con un singolo POST, e ricevi un webhook quando arrivano le monete. È una BTC API nel senso più semplice: HTTPS in entrata, JSON in uscita. L'autenticazione è un Bearer token da una prova gratuita di 7 giorni — nessun node, nessun KYC per iniziare.
Bitcoin su REST invece di JSON-RPC
Il JSON-RPC di Bitcoin Core vuole un nodo sincronizzato prima della prima risposta utile. Una REST API vuole una API key. La differenza si vede nel tuo calendario: il download iniziale dei blocchi richiede giorni su hardware tipico, e dopo il nodo consuma disco e banda, e continua a richiedere monitoraggio, per tutta la vita del tuo prodotto. Il nostro articolo su blockchain API vs. blockchain node confronta i due approcci in dettaglio. Gestisci un tuo nodo quando hai bisogno di un controllo a livello di policy sulla tua visione della rete; usa l'API quando l'obiettivo sono i pagamenti.
Le chiamate quotidiane si adattano perfettamente al modello REST. Dove un'integrazione a nodo avvolge getnewaddress e listtransactions e fa polling per i cambiamenti, l'API assegna indirizzi e lascia che sia il webhook a sorvegliare. I cicli di polling scompaiono, e con loro i cron job che si rompono silenziosamente durante un weekend.
C'è una seconda differenza. I metodi RPC grezzi restituiscono dati grezzi. Chaingateway restituisce JSON strutturato con campi leggibili, così una risposta può finire direttamente nel tuo database invece che passare per un livello di parsing.
Cosa servirebbe con bitcoin-core RPC, a confronto
Il confronto diventa concreto appena si elenca il lavoro effettivo. Supponiamo che il compito sia "dare a ogni cliente un indirizzo di deposito e accreditare il suo account quando arriva BTC".
| Compito | Con Bitcoin Core (JSON-RPC) | Con la REST API |
|---|---|---|
| Prerequisito | un full node sincronizzato: bitcoind più diverse centinaia di GB di dati della chain | una API key |
| Nuovo indirizzo di deposito | getnewaddress per cliente, più un regime di backup wallet che scripti tu stesso | POST /api/v2/bitcoin/wallets/{wallet}/addresses |
| Rilevare BTC in entrata | configurare walletnotify, oppure fare polling su listsinceblock / gettransaction con un timer | POST firmata del webhook al tuo server |
| Inviare BTC | sendtoaddress, più un hot wallet nel nodo, impostazioni delle commissioni e backup del wallet file che gestisci tu | POST /api/v2/bitcoin/transactions |
| Tracciare le conferme | rifare polling su gettransaction finché il conteggio soddisfa la tua policy | polling su GET /api/v2/bitcoin/transactions/{txid}/decoded, che riporta il conteggio delle conferme |
| Audit trail | parsare l'output di listtransactions e deduplicare nel tuo codice | GET /api/v2/bitcoin/webhooks/notifications |
| Costo continuativo | disco, banda, aggiornamenti, monitoraggio | problema del provider |
I pagamenti in uscita meritano uno sguardo più attento. sendtoaddress sembra una singola chiamata, ma presuppone un hot wallet dentro il tuo nodo, impostazioni delle commissioni che gestisci tu e un backup testato del wallet file. Anche getbalance è più limitato di quanto sembri: riporta il saldo del wallet del nodo, non di un indirizzo arbitrario, quindi la contabilità in stile exchange finisce comunque nel tuo codice. Nulla di tutto ciò è una critica a Bitcoin Core — è il software di riferimento per gestire la rete ed è bravo in quel compito. Non è mai stato pensato per essere il backend di pagamento di un'applicazione web, motivo per cui si accumula così tanto codice di collegamento attorno ad esso.
Inviare BTC via REST
Il lato REST del percorso di invio sono tre endpoint. POST /api/v2/bitcoin/wallets crea un wallet, cifrato con una password che Chaingateway non memorizza — perdila e nessuno può ripristinare il wallet, ed è proprio questo il punto. POST /api/v2/bitcoin/wallets/{wallet}/addresses deriva tutti gli indirizzi che ti servono sotto di esso; un wallet li porta tutti. E POST /api/v2/bitcoin/transactions invia:
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 risposta porta il txid della transazione trasmessa. speed accetta fast, medium o slow e imposta il livello di commissione — il compromesso tra costo e tempo alla prima conferma. Un subtractfee: true opzionale deduce la commissione di rete dall'importo invece di aggiungerla sopra, il che è ciò che vuoi quando un cliente preleva l'intero saldo.
Questa è la chiamata di invio completa — crea un account ed eseguila su testnet con il tuo wallet.
Tutto ciò che ti serve per accettare BTC
Webhook (IPN)
Notifiche di pagamento istantanee per le transazioni in entrata, inviate appena una transazione corrispondente si liquida on-chain. Imposta un secret personale nel tuo profilo e ogni notifica porterà un header X-Signature che il tuo server può verificare. Le consegne fallite sono elencate su GET /api/v2/bitcoin/webhooks/notifications/failed e possono essere reinviate con una sola chiamata.
Endpoint REST prevedibili
Crea indirizzi e traccia i pagamenti con un'API pulita e coerente. Richieste e risposte assomigliano al resto della piattaforma Chaingateway, così uno sviluppatore che ha già integrato una chain legge le risposte di Bitcoin senza bisogno di un manuale.
Gestione sicura degli indirizzi
Non-custodial per design, con validazione degli indirizzi integrata. Indirizzi malformati o digitati male falliscono prima che qualsiasi cosa tocchi la chain.
Query decodificate
I dati delle transazioni arrivano come JSON strutturato invece che hex grezzo, inclusi gli importi e lo stato di conferma su cui agisce il tuo backend.
Tempi di blocco e conferme: cosa aspettarsi
Bitcoin aggiunge un blocco circa ogni dieci minuti, sebbene gli intervalli singoli varino molto. Ogni nuovo blocco minato sopra quello che contiene la tua transazione aggiunge una conferma, e ogni conferma rende più difficile l'inversione.
| Dimensione del pagamento | Conferme da attendere |
|---|---|
| Piccolo, fino a circa 1.000 $ | 1 (circa 10 minuti) |
| Medio, fino a circa 10.000 $ | 3 (circa 30 minuti) |
| Grande | 6 (circa un'ora) |
| Molto grande, oltre 1 milione $ | 10 o più |
Sei conferme — circa un'ora — è stato lo standard de facto per "liquidato" fin dai primi giorni degli exchange, e resta valido a metà 2026.
Dieci minuti sono una media, non un orario
L'aggiustamento della difficoltà lo mantiene nel tempo, ma gli intervalli singoli si disperdono ampiamente attorno ad esso — due blocchi in un minuto capitano, e così pure siccità di quaranta minuti. L'esperienza utente nei pagamenti deve rispettare questo: "circa dieci minuti" è una media, non una promessa, quindi la tua pagina di checkout dovrebbe dire "di solito entro un'ora" invece di far girare un conto alla rovescia che non può mantenere.
Perché non accreditare a zero conferme?
Perché finché una transazione non è in un blocco, resta nel mempool, dove può essere sostituita o doppiamente spesa, e anche il blocco più recente può uscire dalla chain in una riorganizzazione. L'API divide quel lavoro in due. Il webhook scatta una volta che la transazione si liquida on-chain — il payload porta importo, indirizzo, txid e numero di blocco — così la tua UI può reagire subito. Da lì, GET /api/v2/bitcoin/transactions/{txid}/decoded restituisce il conteggio attuale delle conferme, così il tuo libro contabile accredita solo denaro che ha raggiunto la tua soglia. Mostra il progresso presto, liquida tardi.
UTXO: perché i depositi Bitcoin differiscono dalle chain EVM
Bitcoin non ha saldi di account. Ciò che la chain memorizza sono unspent transaction output — UTXO — ciascuno un blocco discreto di valore vincolato a un indirizzo. Il "saldo" di un wallet è un numero che il tuo software deriva sommando ogni UTXO controllato dai suoi indirizzi; il protocollo non memorizza mai quella somma da nessuna parte. Spendere consuma UTXO interi e ne crea di nuovi, incluso un output di resto verso te stesso, nello stesso modo in cui pagare un conto da 7 euro con una banconota da 10 restituisce monete.
Ethereum funziona con il modello opposto. Un account ha un saldo, la chain lo memorizza direttamente, e un deposito è un incremento. Sulle chain EVM è normale dare a un cliente un unico indirizzo e lasciare che vi si accumulino cento depositi nel corso degli anni.
Per la gestione dei depositi, il modello UTXO ha un vantaggio pratico: ti spinge verso un indirizzo per cliente o per fattura, che è comunque il design più pulito. Ogni pagamento in entrata è un nuovo output verso un indirizzo che osservi, quindi l'attribuzione è inequivocabile — nessun parsing di memo, nessun abbinamento per importo. Significa anche che "il saldo di un indirizzo" è una domanda a cui risponde un indexer piuttosto che la chain, che è esattamente la contabilità che esternalizzi usando un'API con webhook invece di gestire tu stesso la macchina. La notifica ti dice: questo importo, questo indirizzo, questa transazione, questo blocco. Il resto lo fa il tuo libro contabile.
Il flusso di deposito, passo per passo
La maggior parte delle integrazioni Bitcoin su Chaingateway ruota attorno ai depositi: un indirizzo per cliente, un webhook per pagamento.
- Assegna a ogni cliente un indirizzo di deposito dal tuo wallet (
POST /api/v2/bitcoin/wallets/{wallet}/addresses). - Il cliente invia BTC.
- Una volta che la transazione si liquida on-chain, Chaingateway invia tramite POST una notifica firmata al tuo server, con importo, indirizzo, txid e numero di blocco.
- Il tuo backend verifica la firma e accredita l'account una volta che il conteggio delle conferme — letto da
GET /api/v2/bitcoin/transactions/{txid}/decoded— soddisfa la tua soglia.
Due note implementative. La consegna non è esattamente-una-volta — una notifica fallita che reinvii tramite l'API arriva di nuovo per intero — quindi rendi il tuo handler idempotente e lega gli accrediti all'ID di transazione anziché contare le callback. E le conferme esistono per un motivo: il blocco più recente può ancora essere orfanizzato in un reorg, motivo per cui la decisione di accredito appartiene al conteggio delle conferme, non solo al webhook.
Aiuta modellare ogni deposito come una piccola macchina a stati anziché un booleano. Un ordine parte da awaiting_payment, passa a detected quando scatta il webhook, avanza attraverso confirming mentre il tuo poller osserva il conteggio delle conferme, e approda a settled una volta raggiunta la soglia — con underpaid ed expired come uscite laterali esplicite. Esistono clienti che inviano 0,00095 BTC contro una fattura da 0,001 BTC, di solito perché il loro wallet ha dedotto la commissione di rete dall'importo inserito; decidi in anticipo se la tua tolleranza assorbe la carenza oppure l'ordine attende un'integrazione. E dai alle fatture una scadenza. I tassi di cambio si muovono, quindi un indirizzo che corrispondeva all'importo della fattura lunedì non dovrebbe liquidarsi a un prezzo obsoleto la settimana successiva.
Per audit e riconciliazione, ogni notifica ricevuta dal tuo account può essere elencata tramite l'API:
curl https://app.chaingateway.io/api/v2/bitcoin/webhooks/notifications \
-H "Authorization: Bearer YOUR_API_KEY"Prima la testnet
Aggiungi l'header X-Network: testnet e ogni chiamata di questa pagina gira sulla rete di test di Bitcoin: stesse rotte, stesse forme di risposta, monete senza valore. I faucet distribuiscono BTC di test gratuitamente, quindi l'intero flusso di deposito — indirizzo, pagamento, webhook, conferme — può essere provato dall'inizio alla fine senza spendere un satoshi.
Tieni l'header dietro la configurazione anziché sparso nel codice, e dai al tuo ambiente di staging un callback URL separato così i depositi di test non possono finire nel libro contabile di produzione. Quando la prova funziona, rimuovi l'header. Nient'altro dell'integrazione cambia, ed è questo il punto: il primo deposito su mainnet dovrebbe essere noioso.
Quando qualcosa fallisce
Un backend di pagamenti si guadagna la fiducia nei giorni difficili, quindi pianifica esplicitamente i percorsi di fallimento.
Sul livello HTTP le regole sono quelle standard di REST. Un 401 significa che il Bearer token è sbagliato o mancante; correggi la key invece di ritentare. Altre risposte 4xx puntano alla richiesta stessa — registra il corpo, che indica il problema, e trattalo come un bug. Le risposte nell'intervallo 5xx e i timeout sono transitori; ritenta quelli con backoff.
Le modalità di fallimento specifiche di Bitcoin vivono sopra HTTP. Un deposito che non conferma mai di solito ha pagato troppo poca commissione ed è bloccato nel mempool; potrebbe confermare ore dopo o sparire del tutto, motivo per cui detected e settled devono restare stati separati nel tuo sistema. Una notifica per un importo inferiore alla fattura è una decisione di business, non un errore — gestiscila nel codice, non in una coda di supporto. E se il tuo endpoint webhook era offline, le consegne fallite ti aspettano: GET /api/v2/bitcoin/webhooks/notifications/failed le elenca, POST /api/v2/bitcoin/webhooks/notifications/{id}/retry reinvia ciascuna, e l'elenco completo su GET /api/v2/bitcoin/webhooks/notifications ti permette di confrontarlo con il libro contabile e accreditare le lacune. Esegui quel confronto ogni notte anche quando nulla sembra sbagliato. Una riconciliazione che gira solo dopo gli incidenti trova i suoi bug in produzione.
Ti servono le stablecoin accanto a BTC?
Bitcoin stesso non ha USDT o USDC — le stablecoin vivono su altre chain. Ciò che la piattaforma condivisa ti offre è un vantaggio di partenza: la tua integrazione Bitcoin parla già la stessa API dei nostri endpoint Ethereum e TRON. Accetta BTC oggi, aggiungi USDT su TRON nello sprint successivo con la stessa key e lo stesso handler webhook. La panoramica della blockchain API elenca tutte e sette le chain supportate.
L'ordine pratico per la maggior parte dei team: lancia prima i depositi BTC, perché è ciò che i clienti chiedono per nome, poi lascia che i dati di pagamento ti dicano quale binario di stablecoin aggiungere per secondo. Su Chaingateway, quel secondo binario riutilizza invariati la tua verifica della firma, il tuo job di riconciliazione e la tua macchina a stati dei depositi.
Perché gli sviluppatori costruiscono su Bitcoin
- Ha il track record più lungo di qualsiasi blockchain, in funzione dal 2009, e il maggiore riconoscimento tra gli utenti finali.
- La rete si liquida 24 ore su 24. Non ci sono orari bancari né chiusure regionali.
- Le conferme seguono un ritmo prevedibile, con un nuovo blocco circa ogni dieci minuti, il che mantiene facilmente ragionabili i flussi di pagamento.
- L'adozione è la più ampia di tutte le reti crypto, quindi "accettate Bitcoin?" resta la prima domanda che fanno i clienti.
Nessuna di queste proprietà è arrivata da un aggiornamento di roadmap; sono le stesse garanzie con cui la rete è stata lanciata. Quella stabilità è l'argomento a favore di BTC nei prodotti con orizzonti lunghi: un'integrazione costruita quest'anno non diventerà obsoleta per un cambio di rotta del protocollo l'anno prossimo, il che è più di quanto possa dire la maggior parte degli stack di pagamento.
Costruito per casi d'uso di pagamento reali
Il caso ovvio è il checkout: un cliente sceglie Bitcoin e la tua app assegna un indirizzo; il webhook conferma il pagamento. Gli stessi blocchi costruttivi sostengono anche carichi più pesanti. Exchange e piattaforme di gaming gestiscono un indirizzo di deposito per utente e accreditano i saldi alla conferma. I flussi di payout e rimessa spingono trasferimenti transfrontalieri senza banche corrispondenti nel mezzo. Le attività in abbonamento generano un nuovo indirizzo di fattura a ogni ciclo e lasciano che il webhook lo chiuda.
Ciò che questi casi condividono è la forma del lavoro. Bitcoin gestisce la liquidazione; la tua applicazione gestisce lo stato. L'API si colloca tra i due e trasforma gli eventi on-chain in chiamate HTTP che il tuo framework già sa instradare — motivo per cui il caso del checkout e quello dell'exchange girano sulla stessa manciata di endpoint.
Integrazione in tre passaggi
Ottieni la tua API key. La registrazione è gratuita e la prova parte senza KYC.
Fai la tua prima richiesta. Conferma la key con GET /api/account, poi crea un wallet e i tuoi indirizzi di deposito.
Configura i webhook e vai in produzione. Punta le notifiche al tuo endpoint, verifica la firma HMAC, poi rimuovi l'header X-Network: testnet — lo stesso codice gira su mainnet.
Cosa funziona su quale chain
Bitcoin è l'unica riga senza colonna di trasferimento token: la chain non ha standard token, quindi il BTC nativo funziona con il proprio modello wallet invece che con una chiamata in stile ERC-20. Ecco come si posiziona rispetto alle altre sei chain.
| Chain | Indirizzi | Trasferimenti di token | Webhook di deposito |
|---|---|---|---|
| Bitcoin | POST /api/v2/bitcoin/wallets/{wallet}/addresses | — (nessuno standard token) | GET /api/v2/bitcoin/webhooks/notifications |
| Ethereum | POST /api/v2/ethereum/addresses/import | ERC-20: POST /api/v2/ethereum/transactions/erc20 | GET /api/v2/ethereum/webhooks/notifications |
| TRON | POST /api/v2/tron/addresses/import | TRC-20 e TRC-10: POST /api/v2/tron/transactions/trc20 e .../trc10 | GET /api/v2/tron/webhooks/notifications |
| Solana | POST /api/v2/solana/addresses | SPL: POST /api/v2/solana/transactions/SPL | — |
| BNB Smart Chain | POST /api/v2/bsc/addresses/import | BEP-20: POST /api/v2/bsc/transactions/bep20 | GET /api/v2/bsc/webhooks/notifications |
| Polygon | POST /api/v2/polygon/addresses/import | ERC-20: POST /api/v2/polygon/transactions/erc20 | GET /api/v2/polygon/webhooks/notifications |
| Arbitrum | POST /api/v2/arbitrum/addresses/import | ERC-20: POST /api/v2/arbitrum/transactions/erc20 | GET /api/v2/arbitrum/webhooks/notifications |
Due note a piè di pagina per leggere correttamente la tabella. Primo: TRON è l'integrazione più profonda della piattaforma. Oltre alle rotte sopra, la documentazione tratta lo staking (POST /api/v2/tron/freeze e /delegate), i parametri di chain, e una coppia di self-signing — /transactions/trc20/build per costruire una transazione e /transactions/broadcast per inviarne una firmata localmente. Se il tuo team compliance insiste che le private key non lascino mai i tuoi server, quel pattern build-and-broadcast è la tua via d'ingresso.
Secondo: un trattino significa che la documentazione attuale non riporta alcuna rotta v2 per quella cella, non che la rete sia di serie B. Bitcoin non ha uno standard token, da cui la cella token vuota — il BTC nativo funziona invece con il proprio modello wallet: crea un wallet protetto da password con POST /api/v2/bitcoin/wallets, deriva indirizzi di deposito sotto di esso, e invia con POST /api/v2/bitcoin/transactions. La documentazione di Solana copre creazione indirizzi, trasferimenti SOL e SPL, e query su saldo e blocco, ma non ancora i webhook. Per qualsiasi cosa non elencata qui, la documentazione API ha lo stato attuale.
Domande frequenti
Pronto ad accettare pagamenti Bitcoin?
Crea un account su app.chaingateway.io/register, crea un wallet e invia un trasferimento BTC di testnet. Il riferimento completo degli endpoint è nella documentazione, e piani e rate limit hanno una pagina propria.