# How to Accept Crypto Payments — Without Giving Up Your Keys

Take Bitcoin, Ethereum and stablecoin payments with a REST API where your private keys never leave your own infrastructure. Point us at a wallet address you already control, get a webhook the moment it's paid, and sweep funds by signing offline. No custody, no node to run.

## Why non-custodial matters for payments

Most "crypto payment" tools ask you to trust them with the keys that control your money — funds land in *their* wallet and you request payouts. That's a custodial relationship, with the counterparty risk that comes with it.

CryptoAPIs is built the other way around. You hold your own keys; we derive receiving addresses and watch the chain for you, but we only ever see public data. When you move funds, you build the transaction through the API, sign it offline with your own private key, and broadcast it. At no point does a private key touch our servers.

> Processing at scale and want a unique address per customer or invoice? Use an HD wallet (xPub) — covered in [How to build a crypto wallet](https://cryptoapis.io/guides/build-a-crypto-wallet). The steps below are identical.

## The flow, end to end

1. **Use the address customers pay into.** Take a wallet address you already control and use it as your deposit address — nothing to create, nothing to hand over.
2. **Get a webhook when the payment lands.** Subscribe to confirmed incoming transactions on your address. Your backend is notified the moment the customer pays — no polling, no keys.
   `POST /blockchain-events/{blockchain}/{network}/address-coins-transactions-confirmed`
3. **Sweep funds by signing offline.** Build the unsigned transaction through the API, sign it offline in your own environment (e.g. the open-source [@cryptoapis-io/offline-signer](https://www.npmjs.com/package/@cryptoapis-io/offline-signer) — no HTTP call, no API key), then broadcast the signed result.
   `POST /prepare-transactions/{evm|utxo}/{blockchain}/{network}/native-coins` → sign offline → `POST /broadcast-transactions/{blockchain}/{network}`

Accepting USDT, USDC or other tokens works the same way — watch the address, and use the token `prepare-transactions` endpoints (ERC-20 / TRC-20) to sweep, still signing offline.

## FAQ

**Is CryptoAPIs custodial? Does it hold my crypto?** No. You keep your own keys. CryptoAPIs derives receiving addresses from your extended public key and watches the chain, but private keys are used only in your environment. Every outgoing transaction is signed offline by you and only then broadcast.

**How do I accept crypto payments without running a node?** Point the API at an address you control, subscribe to a confirmed-transaction webhook on it, and you're notified the moment a customer pays — across 20+ chains, with no node to maintain.

**Can I accept stablecoins like USDT and USDC?** Yes. Token payments use the same watch flow; sweeping uses the token prepare-transaction endpoints (ERC-20, TRC-20 and more), still signed offline.

**How is this different from a crypto payment gateway?** Typical gateways are custodial — funds settle in the provider's wallet. Here funds land in addresses you control, and you move them by signing offline. It's payment infrastructure, not a custodial middleman.

[Start building free](https://app.cryptoapis.io/auth/register) · [Read the API docs](https://developers.cryptoapis.io/)
