Lower fees
We rent and sponsor the TRON energy your transfer needs, so you pay one small fee, shown before you sign, instead of $2.18–$4.28 in burned TRX.
Non-custodial · USDT on TRON
Pay up to ~20% less in network fees — often just ~$1.74 a transfer. No account, no lock-ups, and your money never leaves your own wallet.
01Track record
Completed USDT transfers through TronTransfer since July 2026. Every one is a public TRON transaction.
02Fees
The fee to send USDT on TRON is really the network “energy” cost. We buy it in bulk so you don’t burn your own TRX.
Up to ~20% less on network fees per transfer
03How it works
Enter or paste the wallet you’re sending to. We check it for scams before you send.
Type how much USDT to send. You see the exact fee — in TRX and dollars — before anything happens.
Connect TronLink, Trust Wallet or imToken and confirm. The median transfer is in a block about 13 seconds after you submit it.
In the app, choose Pay the network fee in: USDT — it’s preselected when your wallet is short of TRX.
04Why TronTransfer
Built to be understood at a glance — no crypto jargon, no surprises.
We rent and sponsor the TRON energy your transfer needs, so you pay one small fee, shown before you sign, instead of $2.18–$4.28 in burned TRX.
Fully non-custodial. Your USDT never leaves your wallet — you approve every transfer yourself. We can never touch your funds.
Every recipient is checked for scams, blacklisted addresses and “address poisoning” before you send, automatically.
Works with the wallets you already use
05Developers
Any wallet with TronWeb can send sponsored USDT — no SDK, no account, no sign-up. You build & sign the two transactions; we broadcast. That's the whole integration:
import TronWeb from "tronweb";
const BASE = "https://trontransfer.com";
const tw = new TronWeb({ fullHost: "https://api.trongrid.io" }); // + your signer
async function sendUsdt(from, to, amountUsdt) {
// 1) config — where the fee goes + the USDT contract
const cfg = await (await fetch(`${BASE}/config`)).json();
// 2) the exact fee for THIS recipient (warm vs cold)
const rcpt = await (await fetch(`${BASE}/recipient?addr=${to}`)).json();
const price = rcpt.pricing || cfg.pricing;
// 3) build BOTH txs: the TRX fee + the USDT transfer
let feeTx = await tw.transactionBuilder.sendTrx(cfg.collectAddress, price.feeSun, from);
const units = Math.round(amountUsdt * 1e6); // USDT = 6 decimals
let usdtTx = (await tw.transactionBuilder.triggerSmartContract(
cfg.usdtContract, "transfer(address,uint256)", { feeLimit: 100000000 },
[{ type: "address", value: to }, { type: "uint256", value: units }], from
)).transaction;
// 4) extend expiration so the relay can rent energy in time
feeTx = await tw.transactionBuilder.extendExpiration(feeTx, 300);
usdtTx = await tw.transactionBuilder.extendExpiration(usdtTx, 300);
// 5) sign BOTH (TronWeb returns the fully-signed tx object)
const feeSigned = await tw.trx.sign(feeTx);
const usdtSigned = await tw.trx.sign(usdtTx);
// 6) submit — the relay broadcasts (you never do)
const res = await fetch(`${BASE}/v1/transfers`, {
method: "POST", headers: { "Content-Type": "application/json" },
body: JSON.stringify({ feeTx: feeSigned, usdtTx: usdtSigned }),
});
const out = await res.json();
if (!out.ok || !out.usdtTxid) throw new Error(out.message);
return out; // { ok:true, usdtTxid, feeTxid, ... }
}
const { TronWeb } = require("tronweb"); // Node 18+ · npm i tronweb
const BASE = "https://trontransfer.com";
// Your key signs — no browser wallet. Keep it in env/KMS, never in code.
const tw = new TronWeb({
fullHost: "https://api.trongrid.io",
privateKey: process.env.TRON_PRIVATE_KEY,
});
const from = tw.defaultAddress.base58; // the key's own address
async function sendUsdt(to, amountUsdt) {
// 1) config + this recipient's exact fee (warm vs cold)
const cfg = await (await fetch(`${BASE}/config`)).json();
const rcpt = await (await fetch(`${BASE}/recipient?addr=${to}`)).json();
const price = rcpt.pricing || cfg.pricing;
// 2) build BOTH txs: the TRX fee + the USDT transfer
let feeTx = await tw.transactionBuilder.sendTrx(cfg.collectAddress, price.feeSun, from);
const units = Math.round(amountUsdt * 1e6); // USDT = 6 decimals
let usdtTx = (await tw.transactionBuilder.triggerSmartContract(
cfg.usdtContract, "transfer(address,uint256)", { feeLimit: 100000000 },
[{ type: "address", value: to }, { type: "uint256", value: units }], from
)).transaction;
// 3) extend expiration so the relay can rent energy in time
feeTx = await tw.transactionBuilder.extendExpiration(feeTx, 300);
usdtTx = await tw.transactionBuilder.extendExpiration(usdtTx, 300);
// 4) sign BOTH with your private key (you never broadcast)
const feeSigned = await tw.trx.sign(feeTx);
const usdtSigned = await tw.trx.sign(usdtTx);
// 5) submit — the relay broadcasts (you never do)
const res = await fetch(`${BASE}/v1/transfers`, {
method: "POST", headers: { "Content-Type": "application/json" },
body: JSON.stringify({ feeTx: feeSigned, usdtTx: usdtSigned }),
});
const out = await res.json();
if (!out.ok || !out.usdtTxid) throw new Error(out.message);
return out; // { ok:true, usdtTxid, feeTxid, ... }
}
The user pays one small TRX fee; we rent & delegate the energy and broadcast. Success returns the on-chain usdtTxid. Fee in USDT instead? See the zero-TRX endpoints. Full reference & error codes · Live explorer
06Learn more
Plain-language answers to the things people ask most.
07FAQ
Usually about $1.74 per transfer with TronTransfer, because we sponsor the network energy for you. Sending it yourself with no staked TRX burns about $2.18–$4.28 in TRX.
No sign-up at all. You connect your own wallet (TronLink, Trust Wallet or imToken) and approve the transfer yourself.
Yes — it’s non-custodial. Your USDT never leaves your wallet, and every recipient is checked for scams and blacklisted addresses before you send.
Not necessarily. Pay the low fee in TRX (the cheaper option), or pay the network fee in USDT instead and your TRX balance can stay at 0, as long as your wallet is already activated on TRON and holds enough USDT for the amount plus the fee. Either way, we supply the network energy your transfer would normally burn.