Transferring fungible tokens on the TRON blockchain is a core operation for developers, enterprises, and decentralized application (dApp) users. Whether you're working with TRC-10 or TRC-20 tokens, understanding the technical flow, prerequisites, and best practices ensures smooth and secure transactions. This guide walks you through the essential steps, API usage, and common pitfalls when sending TRON-compatible tokens.
Understanding TRC-10 and TRC-20 Tokens
Before initiating a transfer, it’s crucial to distinguish between the two primary token standards on TRON:
- TRC-10: Native tokens built directly into the TRON protocol. They do not require smart contracts to function and are generally faster and cheaper to transfer.
- TRC-20: Token standard based on smart contracts, similar to ERC-20 on Ethereum. These offer greater flexibility but require gas in the form of TRX for execution.
Both token types are widely used across exchanges, DeFi platforms, and gaming ecosystems. Identifying which standard your token uses determines the correct transfer method.
Prerequisites for Token Transfer
To successfully send TRC-10 or TRC-20 tokens, ensure the following conditions are met:
✅ Confirm the token contract address or token ID
- For TRC-10: Use the
tokenId(e.g.,1001388) - For TRC-20: Use the full contract address (e.g.,
TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs)
- For TRC-10: Use the
- ✅ Verify the sender's blockchain address
Ensure it matches the private key used to sign the transaction. - ✅ Confirm ownership of the correct private key
This is required to sign and broadcast the transaction securely. - ✅ Validate the recipient's blockchain address
Always double-check for accuracy—blockchain transactions are irreversible.
👉 Learn how to securely manage your blockchain assets and initiate fast transfers.
Checking Balances: Native and Token Assets
Before transferring tokens, verify that the sender has sufficient funds—both in native TRX (for gas) and the token being sent.
Use the Tatum v3 REST API to fetch account balances:
curl --location 'https://api.tatum.io/v3/tron/account/TJWCFsbeK6aybMTnsis1mccNX4gjW4ecah' \
--header 'accept: application/json' \
--header 'x-api-key: {YOUR_API_KEY}'Sample Response:
{
"balance": 29127653860,
"trc10": [
{
"value": 992000000000,
"key": "1001388"
}
],
"trc20": [
{
"TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs": "12373507649"
}
],
"freeNetLimit": 600,
"bandwidth": 600
}🔴 Important: Addresses with zero TRX cannot retrieve balance data until activated. Deposit a small amount of TRX to activate inactive addresses.
Sending TRC-10 Tokens
To transfer TRC-10 tokens, use the /tron/trc10/transaction endpoint.
Request Example:
curl --location 'https://api.tatum.io/v3/tron/trc10/transaction' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-api-key: {YOUR_API_KEY}' \
--data '
{
"fromPrivateKey": "SENDER_PRIVATE_KEY",
"to": "TF48MUvZhSDpLFfC414b94Nj4LwqBFbXom",
"tokenId": "1001388",
"amount": "100"
}'Response:
{
"txId": "856db9686309886f65f8e87eb4164ac5e89838f555ccdf70fdf07083ff22f67f"
}This returns the transaction hash, which can be used to track confirmation status.
Sending TRC-20 Tokens
TRC-20 transfers require interaction with a smart contract. Use the /tron/trc20/transaction endpoint.
Request Example:
curl --location 'https://api.tatum.io/v3/tron/trc20/transaction' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-api-key: {YOUR_API_KEY}' \
--data '
{
"fromPrivateKey": "SENDER_PRIVATE_KEY",
"to": "TF48MUvZhSDpLFfC414b94Nj4LwqBFbXom",
"tokenAddress": "TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs",
"feeLimit": 100,
"amount": "100.123456"
}'📘 Note: Respect token decimals. If a token supports 6 decimal places, sending 100.123456 means 100,123,456 units at the smallest denomination.Response:
{
"txId": "f33291c1449ee0742748a168992530a5de83e33533900bf39052a43fdb32a909"
}👉 Discover how to streamline multi-chain token operations with advanced tools.
Verifying Transaction Status
After submission, confirm the transaction succeeded using its hash.
API Call:
curl --location 'https://api.tatum.io/v3/tron/transaction/856db9686309886f65f8e87eb4164ac5e89838f555ccdf70fdf07083ff22f67f' \
--header 'accept: application/json' \
--header 'x-api-key: {YOUR_API_KEY}'A successful response includes "contractRet": "SUCCESS" and details like block number, timestamp, and gas usage.
Key Considerations & Best Practices
🔹 Gas Fees and Fee Limits
- All transactions require TRX to cover bandwidth, energy, or network fees.
- TRC-20 transfers consume more resources due to smart contract execution.
- Fee estimation on testnets is unreliable—real-world mainnet behavior may differ.
🔹 Token Decimals Matter
Always check how many decimal places a token supports. Sending 1 token might actually require formatting as 1000000 if it uses 6 decimals.
🔹 Security First
- Never expose private keys.
- Use secure key derivation paths (e.g., BIP44).
- Store credentials in encrypted environments.
🔹 Common Errors and Fixes
| Error | Solution |
|---|---|
Callback is not defined | Ensure callback URLs are correctly configured in your integration. |
Transaction could not be found | Wait for block confirmation or verify the correct network (mainnet vs testnet). |
"tron.tx.expired" | Increase transaction expiration time or resend promptly after signing. |
👉 Access powerful blockchain tools that simplify token management and reduce errors.
Frequently Asked Questions (FAQ)
Q: What’s the difference between TRC-10 and TRC-20 tokens?
A: TRC-10 tokens are native to the TRON network and don’t rely on smart contracts, making transfers faster and cheaper. TRC-20 tokens are smart contract-based, offering more functionality but requiring more gas.
Q: Why can’t I check an address’s balance if it has no TRX?
A: On TRON, addresses must be activated by receiving at least one TRX. Until then, they don’t exist on-chain and return errors when queried.
Q: How do I know how many decimals my token supports?
A: Check the token’s contract details via a block explorer like Tronscan. Most APIs also return this metadata upon inspection.
Q: Can I recover funds sent to a wrong address?
A: No. Blockchain transactions are irreversible. Always verify recipient addresses before confirming.
Q: Why did my TRC-20 transfer fail even with enough tokens?
A: Likely due to insufficient TRX for gas. Ensure the sender holds enough TRX to cover energy and bandwidth costs.
Q: Is there a way to estimate gas fees before sending?
A: While exact fees vary, you can use historical data from recent transactions. However, testnet estimates are often inaccurate due to low usage and arbitrary fee settings.
Core Keywords: TRON, TRC-10, TRC-20, fungible tokens, token transfer, blockchain, smart contract, API integration