B2B REST API for automated TRON Energy rental. Buy energy for USDT TRC-20 transfers programmatically — on-chain or from your TronBid balance.
The Quick Rent API is a way to rent TRON Energy automatically, with no manual work. Energy makes USDT (TRC-20) transfers and other smart-contract calls cheaper than burning TRX.
In plain words: your program (a site, bot, or service) buys energy itself, exactly when it's needed — for example, before each USDT transfer your customer makes.
Think of a vending machine: you check the price, insert money, get your item. The API is the same set of buttons — only your program presses them.
Your program asks the API how much the needed energy package costs right now.
Your program creates an order and pays it — by sending TRX to the given address or by charging your TronBid balance.
Within a few seconds energy appears on the target wallet, and USDT can be sent cheaper.
Important: the API is a tool for a developer. To use it, someone has to write code that sends the requests.
If there's no one to write code — use the ready-made energy purchase on the site (Quick Rent) or the Telegram bot @tronbid. Same result, just done manually.
Short explanations of the words used in this documentation.
What to prepare before making your first request.
Message @tronbid on Telegram — you'll get a key bound to your TronBid account. Requests won't pass without it.
Decide the address (target_address) that needs energy. Usually it's the wallet your customers send USDT from.
Energy is sold in packages (usually 65000 or 131000 energy for 15 or 60 minutes). Get the live list from the catalog endpoint, no auth needed.
For on-chain — a wallet with TRX to pay. For balance payment — a funded TronBid account and the balance mode enabled.
The Quick Rent API lets your service rent TRON Energy automatically, so USDT TRC-20 transfers and other smart-contract calls cost less than burning TRX.
All endpoints share one base URL.
https://tronbid.com/api/v2/quick-rentThere are two ways to pay for an order. On-chain is the default and needs no setup. Balance payment is optional and must be enabled for your key.
Without activation, a request with payment_mode: balance returns 403 BALANCE_PAYMENT_NOT_ENABLED. To enable it, contact TronBid support.
| Mode | How to enable | Payment |
|---|---|---|
on-chain | Default — omit payment_mode (or "onchain") | Send TRX to pay_address from payer_address |
balance | payment_mode: balance + enabled for your key | Debited from your TronBid TRX balance |
energy_amount and duration_minutes must match an active Quick Rent package — usually 65000 or 131000 energy and 15 or 60 minutes.
Fetch the current catalog any time (no auth required):
curl -sS https://tronbid.com/api/public/quick-rent/skusA full end-to-end example on the simplest scenario (on-chain). Four steps and energy is on the wallet.
Below is what happens at each step and what the API returns. Plug in your API key, addresses and order id.
Send the energy amount and duration. You get price_trx back and how many seconds it's locked for.
Send the package, your idempotency_key and payer_address. You get pay_address (where to pay), amount_trx (how much) and expires_at (until when).
Send exactly amount_trx TRX to pay_address from your payer_address. It's a plain TRON transfer.
Poll the status every couple of seconds until it becomes delegated. That means energy is delegated to the wallet — done.
{
"price_trx": "3.200000",
"available": true,
"save_percent": 62,
"expires_in_sec": 30
}{
"id": "uuid",
"status": "pending_payment",
"payment_mode": "onchain",
"pay_address": "TDeposit...",
"amount_trx": "3.200000",
"energy_amount": 131000,
"duration_minutes": 15,
"expires_at": "2026-04-29T13:15:00.000Z",
"qr_payload": "tron:TDeposit...?amount=3.200000",
"duplicate": false,
"target_address": "TTarget..."
}# poll every 3s until the order is done
while true; do
STATUS=$(curl -sS "$BASE_URL/api/v2/quick-rent/orders/$ORDER_ID" \
-H "Authorization: Bearer $API_KEY" | jq -r .status)
echo "status: $STATUS"
case "$STATUS" in
delegated|failed|expired|cancelled) break ;;
esac
sleep 3
done{
"id": "uuid",
"status": "delegated",
"payment_mode": "onchain",
"amount_trx": "3.200000",
"energy_amount": 131000,
"effective_energy_amount": 131000,
"duration_minutes": 15,
"pay_address": "TDeposit...",
"payer_address": "TPayer...",
"target_address": "TTarget...",
"error_code": null,
"error_message": null
}Step 1 — POST /quote to learn the price. Step 2 — POST /orders to create the order and receive pay_address, amount_trx and expires_at. Step 3 — send exactly amount_trx TRX to pay_address from your payer_address. Step 4 — poll GET /orders/:id until the status is delegated (or failed / expired / cancelled).
target_address is optional — if omitted, energy is delegated to payer_address.
Only one open on-chain order (pending_payment) is allowed per payer_address at a time; otherwise you get 409 PENDING_PAYMENT_INTENT_EXISTS. On under/overpayment the final energy may differ — check effective_energy_amount in GET /orders/:id.
{
"energy_amount": 131000,
"duration_minutes": 15,
"idempotency_key": "your-unique-key-001",
"payer_address": "TPayerWalletXXXXXXXXXXXXXXXXXXXXXX",
"target_address": "TTargetWalletXXXXXXXXXXXXXXXXXXXXX"
}{
"id": "uuid",
"status": "pending_payment",
"payment_mode": "onchain",
"pay_address": "TDeposit...",
"amount_trx": "3.200000",
"energy_amount": 131000,
"duration_minutes": 15,
"expires_at": "2026-04-29T13:15:00.000Z",
"qr_payload": "tron:TDeposit...?amount=3.200000",
"duplicate": false,
"target_address": "TTarget..."
}Step 1 — GET /balance to check your TRX. Step 2 — POST /quote for the price. Step 3 — POST /orders with payment_mode: balance to debit and start delegation. Step 4 — poll GET /orders/:id until delegated (on a delegation error it becomes failed and TRX is refunded to your balance).
payer_address is not needed — the account linked to your API key pays. The energy_amount in the response can be higher than the ordered SKU (price-matrix bonus).
{
"energy_amount": 131000,
"duration_minutes": 15,
"idempotency_key": "your-unique-key-balance-001",
"payment_mode": "balance",
"target_address": "TTargetWalletXXXXXXXXXXXXXXXXXXXXX"
}{
"id": "uuid",
"status": "delegating",
"payment_mode": "balance",
"pay_address": null,
"amount_trx": "3.200000",
"energy_amount": 132310,
"duration_minutes": 15,
"expires_at": null,
"qr_payload": null,
"duplicate": false,
"target_address": "TTarget..."
}Every order moves through these statuses. Poll GET /orders/:id to follow it.
| Status | Meaning |
|---|---|
pending_payment | Waiting for on-chain payment |
delegating | Payment received or balance charged; delegation in progress |
delegated | Energy delegated |
cancelled | Cancelled before payment (on-chain) |
expired | On-chain payment window elapsed |
failed | Error (for balance, TRX is refunded) |
idempotency_key (8–128 chars) is a unique order id on your side. Repeating POST /orders with the same key (for the same API client) returns the same order with "duplicate": true.
Do not reuse one idempotency_key across different payment modes (onchain vs balance) — that returns 409 IDEMPOTENCY_PAYMENT_MODE_MISMATCH.
Estimate how much energy an address needs for a transfer. Pass the recipient wallet and whether it already holds USDT.
/api/v2/quick-rent/calculator| Parameter | Type | Description | Example |
|---|---|---|---|
wallet_address | string | TRON address to analyze | TXXXXXXXX...XXXX |
has_usdt | boolean | null | Whether the recipient already holds USDT (affects energy). true, false, or omit. | true |
{
"wallet_address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"has_usdt": true
}curl -sS -X POST "$BASE_URL/api/v2/quick-rent/calculator" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"wallet_address":"TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","has_usdt":true}'Returns the current price for a package: price_trx, availability, save_percent and how long the quote is valid (expires_in_sec).
/api/v2/quick-rent/quote| Parameter | Type | Description | Example |
|---|---|---|---|
energy_amount | int | Energy amount from the active catalog | 131000 |
duration_minutes | int | Rental duration from the catalog | 15 |
{
"price_trx": "3.200000",
"available": true,
"save_percent": 62,
"expires_in_sec": 30
}export BASE_URL="https://tronbid.com"
export API_KEY="your_api_key"
curl -sS -X POST "$BASE_URL/api/v2/quick-rent/quote" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"energy_amount":131000,"duration_minutes":15}'Creates a rental order. For on-chain, pass payer_address and pay the returned amount_trx to pay_address. For balance, add payment_mode: balance and the linked account is charged immediately.
target_address is optional (defaults to payer_address). Mind the 409 rules: one open on-chain order per payer, and no active Quick Rent delegation already on the target (ACTIVE_DELEGATION_EXISTS).
/api/v2/quick-rent/orders| Parameter | Type | Description | Example |
|---|---|---|---|
energy_amount | int | Energy amount from the catalog | 131000 |
duration_minutes | int | Rental duration from the catalog | 15 |
idempotency_key | string | Your unique order id (8–128 chars) | partner-onchain-001 |
payment_mode | string | Optional. "onchain" (default) or "balance". | balance |
payer_address | string | On-chain: wallet that sends TRX. Not needed for balance. | TPayer... |
target_address | string | Optional. Wallet that receives energy (defaults to payer_address). | TTarget... |
{
"id": "uuid",
"status": "pending_payment",
"payment_mode": "onchain",
"pay_address": "TDeposit...",
"amount_trx": "3.200000",
"energy_amount": 131000,
"duration_minutes": 15,
"expires_at": "2026-04-29T13:15:00.000Z",
"qr_payload": "tron:TDeposit...?amount=3.200000",
"duplicate": false,
"target_address": "TTarget..."
}{
"id": "uuid",
"status": "delegating",
"payment_mode": "balance",
"pay_address": null,
"amount_trx": "3.200000",
"energy_amount": 132310,
"duration_minutes": 15,
"expires_at": null,
"qr_payload": null,
"duplicate": false,
"target_address": "TTarget..."
}curl -sS -X POST "$BASE_URL/api/v2/quick-rent/orders" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"energy_amount": 131000,
"duration_minutes": 15,
"idempotency_key": "partner-onchain-001",
"payer_address": "TPayer...",
"target_address": "TTarget..."
}'curl -sS -X POST "$BASE_URL/api/v2/quick-rent/orders" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"energy_amount": 131000,
"duration_minutes": 15,
"idempotency_key": "partner-balance-001",
"payment_mode": "balance",
"target_address": "TTarget..."
}'Returns the current status, payment_mode, amounts, addresses, and error_code / error_message if something failed. effective_energy_amount reflects the actual delegated energy after under/overpayment.
/api/v2/quick-rent/orders/:id| Parameter | Type | Description | Example |
|---|---|---|---|
id | string | Order id (path parameter) | uuid |
{
"id": "uuid",
"status": "delegated",
"payment_mode": "onchain",
"amount_trx": "3.200000",
"energy_amount": 131000,
"effective_energy_amount": 131000,
"duration_minutes": 15,
"pay_address": "TDeposit...",
"payer_address": "TPayer...",
"target_address": "TTarget...",
"error_code": null,
"error_message": null
}curl -sS "$BASE_URL/api/v2/quick-rent/orders/$ORDER_ID" \
-H "Authorization: Bearer $API_KEY"Cancels an order that is still pending_payment (on-chain only). Once energy has been delegated, the order can no longer be cancelled.
/api/v2/quick-rent/orders/:id/cancel| Parameter | Type | Description | Example |
|---|---|---|---|
id | string | Order id (path parameter) | uuid |
curl -sS -X POST "$BASE_URL/api/v2/quick-rent/orders/$ORDER_ID/cancel" \
-H "Authorization: Bearer $API_KEY"Changes the paying wallet for a pending_payment on-chain order — useful if the customer decides to pay from a different wallet before sending TRX.
/api/v2/quick-rent/orders/:id/set-payer| Parameter | Type | Description | Example |
|---|---|---|---|
id | string | Order id (path parameter) | uuid |
payer_address | string | New paying wallet | TNewPayer... |
curl -sS -X POST "$BASE_URL/api/v2/quick-rent/orders/$ORDER_ID/set-payer" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"payer_address":"TNewPayer..."}'Returns the TRX balance of the TronBid account linked to your API key (your in-app balance, not an on-chain wallet). Requires the Authorization header.
/api/v2/quick-rent/balance{ "balance_trx": "150.500000" }curl -sS "$BASE_URL/api/v2/quick-rent/balance" \
-H "Authorization: Bearer $API_KEY"Errors return an HTTP status and an error field. Here are the ones you may encounter.
| HTTP | error | When |
|---|---|---|
| 400 | Invalid body | Invalid JSON or fields |
| 400 | INVALID_SKU / SKU_INACTIVE | Package unavailable |
| 400 | INVALID_PAYER_ADDRESS / INVALID_TARGET_ADDRESS | Malformed TRON address |
| 400 | INSUFFICIENT_BALANCE | Not enough TRX on balance (balance mode) |
| 401 | Unauthorized | Missing or invalid API key |
| 403 | BALANCE_PAYMENT_NOT_ENABLED | Balance payment not enabled for your key |
| 409 | PENDING_PAYMENT_INTENT_EXISTS | An open on-chain order already exists for this payer |
| 409 | ACTIVE_DELEGATION_EXISTS | Target already has an active Quick Rent delegation |
| 409 | POOL_ENERGY_INSUFFICIENT | No free pool energy right now |
| 409 | IDEMPOTENCY_PAYMENT_MODE_MISMATCH | Same idempotency_key with a different payment_mode |
| 429 | Too Many Requests | Rate limit |
| 503 | — | Service temporarily unavailable, retry later |
Common situations and what to do, in plain words.
Make sure the transferred amount exactly equals amount_trx and the funds went to pay_address from the exact payer_address. The transfer must arrive before expires_at. The status usually updates within a minute after network confirmation — keep polling GET /orders/:id.
Delegation didn't succeed. For balance payments the TRX is automatically returned to your balance. The reason is in error_code and error_message of GET /orders/:id. You can create a new order.
This payer_address already has an unpaid on-chain order. Pay it, wait for it to expire (expires_at), or cancel it via /orders/:id/cancel, then create a new one.
Balance payment isn't enabled for your key. Contact TronBid support to activate it, or use on-chain (the default).
Too many requests in a short time. Lower the polling frequency (e.g. once every 3 seconds) and retry later.
With underpayment/overpayment on-chain the final amount changes. Check effective_energy_amount in GET /orders/:id — that's the energy actually delegated.
Need API access, higher limits, or balance payment enabled? Reach out and we'll help.