TRON Energy Rental API for Automated USDT TRC-20 Transfers
Automate TRON Energy rental for wallets, exchanges, OTC desks, and payment services. Get live quotes, create idempotent orders, and pay on-chain or from your TronBid balance.
- Live package quotes
- On-chain or balance payment
- Idempotent order creation
- API version
- v2
- Last updated
- 2026-09-30
- Production base URL
- https://tronbid.com/api/v2/quick-rent
On this page
Getting Started
Overview: what it is and who it's for
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.
- 1Ask for a price
Your program asks the API how much the needed energy package costs right now.
- 2Create an order and pay
Your program creates an order and pays it — by sending TRX to the given address or by charging your TronBid balance.
- 3Get the energy
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.
Glossary
Short explanations of the words used in this documentation.
- Energy
- The "fuel" of the TRON network for smart-contract operations. If there isn't enough, the network burns TRX instead — which is more expensive. Renting energy saves money.
- TRX
- The native coin of the TRON network. It pays for energy rental and network fees.
- USDT TRC-20
- A stablecoin (dollar) on TRON. Sending it is a smart-contract call that needs energy.
- API key
- Your secret password for API access. Sent with every request. Keep it on the server only.
- Endpoint
- A specific address-"button" of the API where your program sends a request (e.g. /quote — get a price).
- GET / POST
- Request types. GET means "just ask / read data"; POST means "do an action" (create an order, calculate a price).
- Bearer token
- How you pass the API key: the header reads Authorization: Bearer YOUR_KEY.
- On-chain payment
- Paying an order with a plain TRX transfer to the given address — works right away, nothing to enable.
- Balance payment
- Paying by charging your TronBid account balance. Faster, but must be enabled for your key first.
- Delegation
- Temporarily handing the rented energy to the target wallet for the rental period (e.g. 15 or 60 minutes).
- Polling
- Re-asking the order status periodically (every couple of seconds) until it becomes delegated or ends with an error.
- idempotency_key
- Your unique order id. If a request is sent twice, the API returns the same order instead of creating a new one — protection against double payment.
Before you start
What to prepare before making your first request.
- 1Get an API key
Message @tronbid on Telegram — you'll get a key bound to your TronBid account. Requests won't pass without it.
- 2Have a target TRON wallet
Decide the address (target_address) that needs energy. Usually it's the wallet your customers send USDT from.
- 3Pick a package from the catalog
Quick Rent offers 65,000, 131,000, 196,500, 262,000, 524,000 and 1,048,000 Energy packages for 15 or 60 minutes. Get the currently active packages from the catalog endpoint; no authentication is required.
- 4Prepare payment
For on-chain — a wallet with TRX to pay. For balance payment — a funded TronBid account and the balance mode enabled.
Introduction
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-rentPayment Modes
There 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 one TRX transfer from ANY wallet to the issued pay_address before expires_at. The resource goes to target_address, not automatically to the sender. |
balance | payment_mode: balance + enabled for your key | Debited from your TronBid TRX balance |
Package Catalog
energy_amount and duration_minutes must match an active Quick Rent package. Energy packages are 65000, 131000, 196500, 262000, 524000 and 1048000, for 15 or 60 minutes. The 196500 package costs three times the current 65000/15-minute price for 15 minutes; its 60-minute price is that total plus 0.7 TRX. Prices are dynamic: request a fresh quote before creating an order. An existing order keeps its captured price.
Fetch the current catalog any time (no auth required):
curl -sS https://tronbid.com/api/public/quick-rent/skusWorkflow
Quickstart: from zero to energy
A 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.
- 1Step 1. Get a price — POST /quote
Send the energy amount and duration. You get price_trx back and how many seconds it's locked for.
- 2Step 2. Create an order — POST /orders
Send the package, idempotency_key and target_address (resource recipient). The response contains pay_address, amount_trx, expires_at and payment_sender_mode.
- 3Step 3. Pay
Send one TRX transfer from ANY wallet to the issued pay_address before expires_at. The resource goes to target_address, not automatically to the sender.
- 4Step 4. Wait for energy — GET /orders/:id
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",
"payment_sender_mode": "any_wallet",
"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",
"delivery_complete": true,
"txid_delegate": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"txids_delegate": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
"payment_mode": "onchain",
"payment_sender_mode": "any_wallet",
"amount_trx": "3.200000",
"expected_amount_trx": "3.200000",
"paid_amount_trx": "3.200000",
"effective_price_trx": null,
"energy_amount": "131000",
"effective_energy_amount": null,
"duration_minutes": 15,
"pay_address": "TDeposit...",
"payer_address": "TPayer...",
"target_address": "TTarget...",
"error_code": null,
"error_message": null
}On-chain Flow
Send the package, idempotency_key and target_address (resource recipient). The response contains pay_address, amount_trx, expires_at and payment_sender_mode.
Send one TRX transfer from ANY wallet to the issued pay_address before expires_at. The resource goes to target_address, not automatically to the sender.
Use target_address for the resource recipient. payer_address remains a backward-compatible recipient alias when target_address is omitted; new orders do not restrict the sending wallet.
Each order gets one available payment address for 15 minutes. If none is available, HTTP 503 PAYMENT_WALLETS_BUSY asks you to retry the same request later. Underpayment or overpayment adjusts effective_energy_amount; separate payments are not combined. The payment detection minimum is 0.9 TRX.
Do not send after expires_at or reuse a payment address. Addresses are reassigned: a later transfer is credited to the order currently using that address.
{
"energy_amount": 131000,
"duration_minutes": 15,
"idempotency_key": "your-unique-key-001",
"target_address": "TTargetWalletXXXXXXXXXXXXXXXXXXXXX"
}{
"id": "uuid",
"status": "pending_payment",
"payment_mode": "onchain",
"payment_sender_mode": "any_wallet",
"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..."
}Balance Flow
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 +1% Energy bonus applies only to the 524000 and 1048000 packages for 15 or 60 minutes: you receive 529240 and 1058480 Energy respectively. All other packages have no bonus. Existing orders retain their captured Energy amount.
{
"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",
"payment_sender_mode": null,
"pay_address": null,
"amount_trx": "3.200000",
"energy_amount": 131000,
"duration_minutes": 15,
"expires_at": null,
"qr_payload": null,
"duplicate": false,
"target_address": "TTarget..."
}Custom Locked: 1–15 minutes (Energy API)
Add custom_lock_minutes to POST /quote and POST /orders to choose a whole-minute Energy lock: 1, 2, 3, …, 15. Custom orders require your API key and support both on-chain payment and enabled balance payment. This option is not available for Bandwidth, the website checkout or the Telegram bot.
Keep duration_minutes at 15: it selects the pricing package. custom_lock_minutes sets the actual lock. Use an active 15-minute energy_amount from the catalog. The price and Energy bonus are exactly those of that package, with no per-minute discount. Read the current price from /quote; examples do not fix a price.
The field is optional. Omit it to keep the existing 15/60-minute behavior, pricing and response format. It has no implicit default. Send a JSON integer; strings, fractions, null, 0, negative values and values above 15 are rejected with HTTP 400. Custom Locked with duration_minutes: 60 or resource_type: bandwidth is also rejected.
Send one TRX transfer from ANY wallet to the issued pay_address before expires_at. The resource goes to target_address, not automatically to the sender. Use target_address for the resource recipient. payer_address remains a backward-compatible recipient alias when target_address is omitted; new orders do not restrict the sending wallet. For balance orders, pass target_address and payment_mode: balance; your API key must have balance payment enabled.
The lock begins when the delegation is included on TRON, not when you request a quote, create an order or pay. One minute is 20 TRON blocks (approximately 60 seconds). We store the actual on-chain delegation_expires_at. expires_at in the payment response is a separate payment deadline.
Poll GET /orders/:id (for example, every 3 seconds). Custom responses include custom_lock_minutes and lock_period_blocks. The status endpoint also returns delegation_expires_at, reclaim_status, txid_delegate, txid_reclaim and reclaimed_at. Unavailable timestamps/transaction IDs are null.
Lifecycle: pending_payment (on-chain only) → delegating → delegated → undelegating → completed. delegated means Energy has been delivered. undelegating means the lock has ended and Reclaim is being processed; reclaim_status is pending. completed and reclaim_status: confirmed mean the return transaction is solidified on-chain. No separate Reclaim request is needed.
Custom orders have a dedicated recovery scan every 3 seconds. Reclaim is attempted as soon as TRON reports the delegation unlocked, independently of the five-minute pool sweep. Block production, queue load and RPC availability can delay submission; network confirmation takes additional time. We do not reclaim before the network lock expires.
Orders, signed transactions and reclaim attempts are persisted. A restart or RPC timeout resumes the same transaction; it does not create another rental. Provider failures retry automatically. The source/recipient pair stays reserved until Reclaim is confirmed; another free pool wallet may serve a new order.
Reuse the same idempotency_key for retries. Changing, adding or removing custom_lock_minutes on an existing key returns 409 IDEMPOTENCY_CUSTOM_LOCK_MISMATCH. Use a new key for a different lock. Existing payment-mode mismatch rules still apply.
Configured webhooks keep their existing signature and delivery mechanism. Custom events include the optional lock fields: quick_buy.delegated when delivered, quick_buy.expired with status: completed and txid_reclaim after confirmed Reclaim, or quick_buy.failed for a verified unsuccessful delegation. Deduplicate by event_id. On provider uncertainty, poll the existing order instead of placing another one.
Wait for delegated before using the Energy. The custom lock is not the payment window. Reclaim returns the delegated resource stake to the pool; it is not a refund of the rental price.
curl -sS -X POST https://tronbid.com/api/v2/quick-rent/quote \
-H "Content-Type: application/json" \
-d '{
"energy_amount": 131000,
"resource_type": "energy",
"duration_minutes": 15,
"custom_lock_minutes": 5
}'curl -sS -X POST https://tronbid.com/api/v2/quick-rent/orders \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"energy_amount": 131000,
"resource_type": "energy",
"duration_minutes": 15,
"custom_lock_minutes": 5,
"payment_mode": "balance",
"target_address": "TTargetWalletXXXXXXXXXXXXXXXXXXXXX",
"idempotency_key": "partner-custom-5min-balance-001"
}'curl -sS -X POST https://tronbid.com/api/v2/quick-rent/orders \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"energy_amount": 131000,
"resource_type": "energy",
"duration_minutes": 15,
"custom_lock_minutes": 5,
"target_address": "TTargetWalletXXXXXXXXXXXXXXXXXXXXX",
"idempotency_key": "partner-custom-5min-onchain-001"
}'{
"id": "00000000-0000-4000-8000-000000000001",
"status": "delegated",
"duration_minutes": 15,
"custom_lock_minutes": 5,
"lock_period_blocks": 100,
"delegation_expires_at": "2026-09-27T12:05:00.000Z",
"reclaim_status": "not_started",
"txid_delegate": "<delegation transaction hash>",
"txid_reclaim": null,
"reclaimed_at": null
}Order Statuses
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) |
undelegating | Custom lock ended; resource Reclaim awaiting confirmation |
completed | Custom resource Reclaim confirmed on-chain |
Idempotency
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.
API Reference
Recipient pool availability
Check whether at least one enabled Quick Rent Energy pool is free for a recipient before submitting an order. POST /api/v2/quick-rent/availability uses your existing Bearer API key and the same per-key and per-IP rate limits as the other authenticated API methods. No idempotency key is required.
Send target_address (a valid TRON Base58 address). resource_type is optional and only accepts energy. Do not send energy_amount, duration_minutes, custom_lock_minutes or payment details to this endpoint. Bandwidth is not supported by this check.
HTTP 200 with available: true and reason: AVAILABLE means at least one pool-to-recipient pair has no active Energy lock or pending Quick Rent reservation. HTTP 200 with available: false and reason: ALL_POOLS_BUSY means every eligible pool is occupied for this recipient. NO_ELIGIBLE_POOLS means no enabled source can serve this address (including the case where the only source is the recipient itself). Busy is a normal result, not an HTTP error.
The check uses the existing order reservation rules, including delegating, delegate_confirming, undelegating and active delegated orders. Custom Locked orders continue to occupy their source until their return is processed, even after the lock time has passed. The check reads current pool configuration and database reservations and requests fresh blockchain lock checks for unreserved pairs. checked_at is the UTC completion time, not a guaranteed unlock time.
HTTP 400: INVALID_REQUEST for malformed JSON, missing/unknown fields or an unsupported resource; INVALID_TARGET_ADDRESS for an invalid address/checksum. HTTP 401: missing, invalid or disabled API key. HTTP 429: rate limit exceeded. HTTP 503: QUICK_RENT_DISABLED or AVAILABILITY_CHECK_UNAVAILABLE when the database, signer configuration or blockchain cannot be verified. A 503 is an unknown result; do not interpret it as available or busy.
Recommended flow: check availability, request a quote for the desired amount, then submit your existing order request. If busy, wait or use another recipient. Retry uncertain checks with backoff; do not poll in a tight loop. All existing endpoints and responses remain unchanged; using this endpoint is optional.
/api/v2/quick-rent/availabilityParameters
| Parameter | Type | Description | Example |
|---|---|---|---|
target_address | string | Required. Recipient TRON Base58 address with a valid checksum. | TWLaGaf3k6dbiEWvif1tNLeKuTErk2Tron |
resource_type | "energy" | Optional. Only energy; defaults to energy. | energy |
This is a read-only pair-occupancy check. It does not create an order, charge a balance, delegate Energy or reserve capacity. It does not validate Energy volume, price, balance, recipient activation or marketplace cross-product restrictions. Availability may change before the order is created; continue handling the existing HTTP 409 ACTIVE_DELEGATION_EXISTS and other order errors. It applies to both standard and Custom Locked Energy rentals.
curl -sS -X POST https://tronbid.com/api/v2/quick-rent/availability \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"target_address": "TWLaGaf3k6dbiEWvif1tNLeKuTErk2Tron"
}'{
"resource_type": "energy",
"target_address": "TWLaGaf3k6dbiEWvif1tNLeKuTErk2Tron",
"available": true,
"reason": "AVAILABLE",
"checked_at": "2026-09-30T12:00:00.000Z"
}{
"resource_type": "energy",
"target_address": "TWLaGaf3k6dbiEWvif1tNLeKuTErk2Tron",
"available": false,
"reason": "ALL_POOLS_BUSY",
"checked_at": "2026-09-30T12:00:00.000Z"
}{
"error": "AVAILABILITY_CHECK_UNAVAILABLE",
"message": "Availability could not be verified. Retry later."
}Calculator
Estimate how much energy an address needs for a transfer. Pass the recipient wallet and whether it already holds USDT.
/api/v2/quick-rent/calculatorParameters
| 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}'Get Quote
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/quoteParameters
| Parameter | Type | Description | Example |
|---|---|---|---|
energy_amount | int | Energy amount from the active catalog | 131000 |
duration_minutes | int | Rental duration from the catalog | 15 |
custom_lock_minutes | integer | Optional integer 1–15 inclusive. Energy API only; requires duration_minutes: 15. Omit for existing behavior. | 5 |
{
"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}'Create Order
Creates a rental order. For on-chain payment, pass target_address and pay from any wallet to the returned pay_address. For balance payment, pass payment_mode: balance; the linked account is charged immediately.
Use target_address for the resource recipient. payer_address remains a backward-compatible recipient alias when target_address is omitted; new orders do not restrict the sending wallet.
Each order gets one available payment address for 15 minutes. If none is available, HTTP 503 PAYMENT_WALLETS_BUSY asks you to retry the same request later. Underpayment or overpayment adjusts effective_energy_amount; separate payments are not combined.
/api/v2/quick-rent/ordersParameters
| 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 | Legacy recipient alias if target_address is omitted. Does not restrict who can pay a new order. | TPayer... |
target_address | string | Resource recipient. Required for balance; for on-chain use this field, or the legacy payer_address alias. | TTarget... |
custom_lock_minutes | integer | Optional integer 1–15 inclusive. Energy API only; requires duration_minutes: 15. Omit for existing behavior. | 5 |
{
"id": "uuid",
"status": "pending_payment",
"payment_mode": "onchain",
"payment_sender_mode": "any_wallet",
"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",
"payment_sender_mode": null,
"pay_address": null,
"amount_trx": "3.200000",
"energy_amount": 131000,
"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",
"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..."
}'Get Order Status
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.
amount_trx is a TRX decimal string (for example, "1.500000"). For balance payments it is the recorded order charge; for on-chain payments it is the expected payment, as in the order-creation response. Legacy orders without an expected amount use their stored price. This field alone does not prove payment, delivery or a refund. Existing fields keep their meaning: paid_amount_trx is the recorded incoming payment and may be null for balance orders; expected_amount_trx is the expected payment; effective_price_trx may record the adjusted rental price after underpayment or overpayment. Check status and delivery_complete to determine fulfilment.
refund is an object only when a completed balance refund is recorded for the current payment attempt; otherwise it is null. status: completed confirms the credit, amount_trx is the refunded TRX decimal string, refunded_at is an ISO 8601 UTC timestamp, and destination is account_balance or bot_balance. A failed order alone does not confirm a refund. null does not prove that no historical refund occurred: older orders may lack a receipt. The refund may exclude an already completed wallet activation. amount_trx at the top level remains the original order charge, not the net charge after a refund. A paid retry starts a new payment attempt; an earlier refund is not reported as a refund of that new payment.
txid_delegate is the TRON delegation transaction hash for both standard and Custom Locked orders. It is not the TronBid order ID or the payment_txid payment hash. When status is delegated, the stored delegation hash is returned in the same response and remains available after the rental ends. It is null until the primary hash is stored; historical records without a saved hash may also return null.
txids_delegate is an array of stored delegation hashes without duplicates. It usually contains one hash; orders fulfilled by multiple transactions, including supplier delivery and own-pool fallback, include all stored hashes. txid_delegate remains a single string or null; when present, the primary hash is first in the array. With no stored hashes, the array is []. A hash may appear before confirmation, and partial transactions before full delivery: check status and delivery_complete rather than the presence of a hash alone.
View a transaction at https://tronscan.org/#/transaction/{txid}. These fields extend the existing GET /api/v2/quick-rent/orders/{id} response: the API URL, keys, request parameters, existing fields and statuses are unchanged. Existing integrations that ignore unknown response fields continue to work unchanged. Strict schema validators should allow additional fields. No new key or extra request parameter is required to receive hashes.
payment_sender_mode is any_wallet for new invoices, specified_wallet for legacy invoices and null for balance. pay_address belongs to this invoice only. payer_address in status is the actual sender after a detected on-chain payment; it is not the resource recipient.
/api/v2/quick-rent/orders/:idParameters
| Parameter | Type | Description | Example |
|---|---|---|---|
id | string | Order id (path parameter) | uuid |
{
"id": "uuid",
"status": "delegated",
"delivery_complete": true,
"txid_delegate": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"txids_delegate": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
"payment_mode": "onchain",
"payment_sender_mode": "any_wallet",
"amount_trx": "3.200000",
"expected_amount_trx": "3.200000",
"paid_amount_trx": "3.200000",
"effective_price_trx": null,
"energy_amount": "131000",
"effective_energy_amount": null,
"duration_minutes": 15,
"pay_address": "TDeposit...",
"payer_address": "TPayer...",
"target_address": "TTarget...",
"error_code": null,
"error_message": null
}{
"id": "uuid",
"status": "delegated",
"delivery_complete": true,
"txid_delegate": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"txids_delegate": [
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
]
}curl -sS "$BASE_URL/api/v2/quick-rent/orders/$ORDER_ID" \
-H "Authorization: Bearer $API_KEY"Cancel Order
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/cancelParameters
| 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"Change Payer
Only for legacy invoices with payment_sender_mode: specified_wallet. New invoices accept any wallet and do not need set-payer; attempting it returns HTTP 409 PAYMENT_SENDER_NOT_REQUIRED.
/api/v2/quick-rent/orders/:id/set-payerParameters
| 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..."}'Get Balance
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"Reference
Error Codes
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 | TARGET_ACCOUNT_NOT_ACTIVATED | Energy recipient wallet is not activated on TRON (no TRX received yet) |
| 503 | TRON_ACCOUNT_CHECK_FAILED | Could not verify account status on TRON — try again later |
| 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 | This applies to legacy invoices that require a specified payer. Complete, cancel or wait for that invoice to expire. New invoices accept any sending wallet. |
| 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 |
| 403 | CUSTOM_LOCK_API_ONLY | Custom Locked order creation requires an authenticated Quick Rent API client. |
| 409 | IDEMPOTENCY_CUSTOM_LOCK_MISMATCH | The same idempotency_key was used with a different custom lock (including adding/removing it). |
| 400 | INVALID_CUSTOM_LOCK | Invalid custom lock: integer 1–15, Energy, duration_minutes: 15 required. |
| 503 | PAYMENT_WALLETS_BUSY / PAYMENT_WALLET_POOL_DISABLED / PAYMENT_SCANNER_UNAVAILABLE | All payment addresses are busy or payment scanning is temporarily unavailable. Wait and retry with the same idempotency_key; a successful retry returns the original order without reserving another address. |
If something goes wrong
Common situations and what to do, in plain words.
I paid but the order is stuck in pending_payment
Send one TRX transfer from ANY wallet to the issued pay_address before expires_at. The resource goes to target_address, not automatically to the sender. Each order gets one available payment address for 15 minutes. If none is available, HTTP 503 PAYMENT_WALLETS_BUSY asks you to retry the same request later. Underpayment or overpayment adjusts effective_energy_amount; separate payments are not combined. Do not send after expires_at or reuse a payment address. Addresses are reassigned: a later transfer is credited to the order currently using that address.
The status became failed — what is it?
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.
Error 409 PENDING_PAYMENT_INTENT_EXISTS
This applies to legacy invoices that require a specified payer. Complete, cancel or wait for that invoice to expire. New invoices accept any sending wallet.
Error 403 BALANCE_PAYMENT_NOT_ENABLED
Balance payment isn't enabled for your key. Contact TronBid support to activate it, or use on-chain (the default).
Error 429 Too Many Requests
Too many requests in a short time. Lower the polling frequency (e.g. once every 3 seconds) and retry later.
I got less energy than I ordered
With underpayment/overpayment on-chain the final amount changes. Check effective_energy_amount in GET /orders/:id — that's the energy actually delegated.
503 PAYMENT_WALLETS_BUSY / PAYMENT_WALLET_POOL_DISABLED / PAYMENT_SCANNER_UNAVAILABLE
All payment addresses are busy or payment scanning is temporarily unavailable. Wait and retry with the same idempotency_key; a successful retry returns the original order without reserving another address.
Support
Need API access, higher limits, or balance payment enabled? Reach out and we'll help.
Build with TronBid
Estimate costs, test Quick Rent, and automate TRON Energy delivery with these resources.
