Accepting Crypto for VPN, Hosting and Proxy Services

A practical guide for VPN, hosting and proxy providers who want to accept crypto, from choosing coins and networks to automating renewals and provisioning.

2026/11/2阅读约 10 分钟
Server rack beside a VPN and proxy card and a 30-day renewal paid with BTC, XMR and USDT

To accept crypto for VPN, hosting or proxy services, connect a crypto payment gateway to your billing system. Price your plans in USD, offer USDT on a cheap network plus Bitcoin and a few other coins, and use the gateway's webhook to activate or extend the service automatically. Renewals work by sending a new invoice each billing period, since crypto has no card-style auto-charge.

Infrastructure services have more reasons than most businesses to accept crypto. Customers come from everywhere, many are technical and already hold crypto, and card payments for VPN and proxy subscriptions often get extra scrutiny from banks. Crypto payments are also final: there is no chargeback months after a server has been used.

This guide covers what to set up and in what order: coins and networks, billing integration, renewals, provisioning on payment, and the edge cases that generate support tickets.

Why VPN, hosting and proxy providers accept crypto

The case is practical, not ideological.

  • Global customers. A customer in a country where international card payments are unreliable can still pay in USDT in a couple of minutes.

  • No chargebacks. A confirmed on-chain payment cannot be reversed by the payer's bank. For services that are consumed immediately (a proxy package, a month of VPS time), that removes a common source of fraud losses.

  • Fast settlement. Funds arrive in your balance after network confirmations, which takes seconds to minutes, not days.

  • Customer demand. Privacy-minded and developer audiences often prefer to pay in crypto and will choose a provider that offers it.

Crypto does not replace your compliance obligations. You still need an abuse policy, terms of service and whatever customer checks your jurisdiction requires. More on that below.

Which coins and networks to offer

You do not need dozens of coins. Stablecoins are the natural default for subscriptions, because a $5 plan stays $5, and Bitcoin covers customers who hold nothing else. A sensible starting set:

Coin / networkWhy offer itNotes
USDT TRC20 (TRON)Widely used for USDT transfers by exchange usersNetwork cost depends on TRON energy; 10 confirmations
USDT BEP20 (BSC)Cheap transfers, widely supported by exchanges5 confirmations
USDT on TON or SolanaVery cheap, popular with Telegram and mobile usersTON needs 1 confirmation, Solana 8
BTCCustomers who hold Bitcoin and will not swap it2 confirmations, higher fees at busy times
LTCCheap and fast, popular for small payments3 confirmations
XMR (Monero)Requested by privacy-focused customers5 confirmations
USDCCustomers who prefer a regulated-issuer stablecoinEthereum, Base, Arbitrum, BSC, Solana

For a deeper look at the stablecoin networks, see our comparison of USDT TRC20, BEP20, ERC20, TON and Solana. If you want to understand why the TRC20 network fee varies so much between transfers, read how TRON energy works.

What about volatility?

If your costs are in dollars (servers, bandwidth, IP leases), you do not want to hold a pile of volatile coins. Two options:

  1. Ask customers to pay in stablecoins only.

  2. Accept everything, and auto-convert incoming payments into one coin, such as USDT. Zypher stores can do this: each incoming payment, net of commission, is swapped into the coin you choose.

Connecting crypto payments to your billing

WHMCS

Most hosting and many VPN providers run WHMCS. The usual path is a payment gateway module:

  1. Create a store in your gateway account and copy the API key and secret.

  2. Install the gateway's WHMCS module in your WHMCS installation.

  3. Activate it as a payment method and paste the key and secret.

  4. Set the webhook (callback) URL that the module gives you in the store settings, so paid invoices are marked as paid in WHMCS automatically.

  5. Run a small real payment and check that the WHMCS invoice changes state and the service is provisioned.

Zypher has a ready WHMCS crypto payment module that follows this pattern. Because there is no test mode, use a cheap product and a low-fee network (TON, Solana or BEP20 USDT) for your first live check.

Custom panels and proxy dashboards

Proxy sellers often run their own dashboard. Then you integrate through the API directly:

  1. When the customer clicks "Pay", your backend creates an invoice with POST /api/v1/invoice, priced in USD, and stores the invoice ID next to the order.

  2. You redirect the customer to the hosted payment page. It shows a QR code, the exact amount and a countdown.

  3. When payment is confirmed, the gateway sends a signed webhook. Verify the X-Webhook-Signature header (an HMAC-SHA256 of the raw body with your API secret) before you trust it.

  4. On invoice.paid, activate the plan or add traffic to the account.

A minimal Node.js webhook handler looks like this:

import crypto from "node:crypto";
import express from "express";

const app = express();
app.post("/webhooks/zypher", express.raw({ type: "application/json" }), (req, res) => {
  const expected = crypto
    .createHmac("sha256", process.env.ZYPHER_API_SECRET)
    .update(req.body)
    .digest("hex");
  const got = req.get("X-Webhook-Signature") || "";
  if (got.length !== expected.length ||
      !crypto.timingSafeEqual(Buffer.from(got), Buffer.from(expected))) {
    return res.status(401).end();
  }
  const { event, data } = JSON.parse(req.body);
  if (event === "invoice.paid" && ["PAID", "OVERPAID"].includes(data.status)) {
    // look up the order by invoice id and provision it, once
  }
  res.status(200).end();
});

Make provisioning idempotent. Webhooks are retried if your server does not answer, so the same event can arrive more than once. Store the invoice ID and skip it if it is already processed. The full request format is in the API docs.

Renewals without auto-charge

Card subscriptions charge the customer automatically. Crypto does not work that way: the customer has to send each payment. That changes how you design renewals, but it is manageable.

A renewal flow that works:

  1. Generate the renewal invoice early. Create it 5–7 days before the due date. WHMCS already does this for recurring products; for a custom panel, run a daily job.

  2. Send a payment link. Email it, show it in the client area, and, if you have a Telegram bot, send it there too.

  3. Remind twice. Once a few days before and once on the due date.

  4. Use a grace period. Suspend 1–3 days after the due date, not at the exact minute. Crypto users sometimes pay from an exchange, and withdrawals there can be delayed.

  5. Reactivate on payment. The webhook that marks the invoice paid should also unsuspend the service.

Keep in mind that a gateway invoice expires. On Zypher, a coin-priced invoice expires after 30 minutes. A USD-priced one gives the customer 60 minutes to choose a coin, then 30 minutes to pay. So the link you email should open your own billing page, which creates a fresh gateway invoice when the customer clicks "Pay". Do not email a gateway invoice link that may already be expired.

Prepaid balance as an alternative

Many proxy and VPS providers avoid renewal friction with a prepaid balance. The customer tops up $50 in USDT, and you deduct usage or monthly fees from the balance. One payment can cover several months, and nothing gets suspended because a payment was late by an hour.

Edge cases that create support tickets

The customer sent slightly less

Exchanges often deduct their withdrawal fee from the amount, so $10.00 becomes $9.00 on arrival. Zypher treats 98% or more as paid. Below that, the invoice becomes UNDERPAID, and the customer can send the remainder to the same address. Partial payments add up. Mention this on your payment instructions page: "If you pay from an exchange, add the exchange's withdrawal fee."

The customer paid after the timer ran out

A payment that arrives up to 30 minutes after expiry can still be matched to the invoice. If it arrives later, handle it manually: check the transaction, then credit the customer's balance or extend the service by hand.

The customer used the wrong network

This is the classic USDT mistake, such as sending BEP20 to a TRC20 address. Recovery depends on the pair of networks. We cover the cases in what to do when a customer sends USDT on the wrong network.

Duplicate payments

Someone pays the same renewal twice from two devices. With a prepaid balance this is harmless. With fixed invoices, credit the extra amount as balance or refund it from your wallet.

Compliance and abuse: what still applies

Accepting crypto does not change your legal position. Some points to keep in mind:

  • Your rules still apply. Terms of service, an abuse process and cooperation with lawful requests are the same whatever the payment method.

  • Customer checks are your policy decision. Depending on where you operate and what you sell, you may be required to verify customers. Check your local rules; this article is not legal advice.

  • Incoming payments are screened. Zypher screens incoming payments for AML risk. If you want to check a customer's address yourself, there is an AML API that returns a risk score and risk level.

  • Accounting. Keep the invoice ID, amount, coin and USD value for every payment. Your accountant will need them. Tax treatment differs by country.

Launch checklist

  • Store created, API key and secret saved somewhere safe

  • Optional IP allowlist set for the store's API access

  • WHMCS module or custom integration installed

  • Webhook URL set and signature verified in your code

  • Provisioning is idempotent (the same webhook twice does not double-credit)

  • Prices in USD; USDT on at least one cheap network enabled

  • Renewal invoices go out 5–7 days early, with a grace period before suspension

  • Payment instructions mention exchange withdrawal fees and the correct network

  • One real low-value payment tested end to end

Costs

Most gateways charge a percentage of each payment. On Zypher it is 1% on the Start tier and falls to 0.75%, 0.5%, 0.35% and 0.25% as your 30-day paid volume grows. There are no setup or monthly fees, and withdrawals pay the network fee. See the pricing page for the full table, and the hosting and VPN solution page for an overview of the setup.

If you want to try it, opening a store takes about a minute and needs no documents: create an account.

FAQ

Can I accept crypto in WHMCS without custom code?

Yes. Install a crypto payment gateway module for WHMCS, paste your store's API key and secret, and set the webhook URL. Paid invoices are then marked as paid automatically. Test it once with a small real payment.

How do I handle recurring VPN subscriptions in crypto?

Crypto cannot be charged automatically from the customer's wallet. Send a new invoice or payment link each billing period, remind customers before the due date, and keep a short grace period before suspension. A prepaid balance is a good alternative.

Which cryptocurrency is best for hosting payments?

USDT is the most practical default, because its value is stable and customers already hold it. Offer it on a cheap network such as TRC20, BEP20, TON or Solana. Add Bitcoin and Litecoin for customers who hold those coins.

What if a customer pays less than the invoice amount?

On Zypher, 98% or more of the amount counts as paid. Below that, the invoice is marked underpaid, and the customer can send the remainder to the same address. The partial payments add up to the total.

Do I still need to verify customers if I accept crypto?

That depends on your jurisdiction and what you sell, not on the payment method. Accepting crypto does not remove any obligations you already have. Check your local rules or ask a lawyer.

Accept Crypto for VPN, Hosting and Proxy Services | Zypher