TRONBID B2B API · VERSION 2

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.

  1. 1
    Ask for a price

    Your program asks the API how much the needed energy package costs right now.

  2. 2
    Create 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.

  3. 3
    Get 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.

  1. 1
    Get an API key

    Message @tronbid on Telegram — you'll get a key bound to your TronBid account. Requests won't pass without it.

  2. 2
    Have a target TRON wallet

    Decide the address (target_address) that needs energy. Usually it's the wallet your customers send USDT from.

  3. 3
    Pick 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.

  4. 4
    Prepare 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.

Base URL (production)
http
https://tronbid.com/api/v2/quick-rent

Authorization

Every request must include your API key as a Bearer token in the Authorization header.

Keep the key server-side only (backend, CI secrets). Never ship it in frontend code or public repositories. The key is bound to a single TronBid account (the wallet set when access was granted); balance payments can only draw from that account.

If you exceed the rate limit, the API responds with HTTP 429.

http
Authorization: Bearer <API_KEY>

Payment 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.

ModeHow to enablePayment
on-chainDefault — 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.
balancepayment_mode: balance + enabled for your keyDebited 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):

Get the active catalog (no auth)
bash
curl -sS https://tronbid.com/api/public/quick-rent/skus

Workflow

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.

  1. 1
    Step 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.

  2. 2
    Step 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.

  3. 3
    Step 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.

  4. 4
    Step 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.

Response
json
{
  "price_trx": "3.200000",
  "available": true,
  "save_percent": 62,
  "expires_in_sec": 30
}
Response (on-chain)
json
{
  "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..."
}
cURL
bash
# 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
Response
json
{
  "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.

Request body
json
{
  "energy_amount": 131000,
  "duration_minutes": 15,
  "idempotency_key": "your-unique-key-001",
  "target_address": "TTargetWalletXXXXXXXXXXXXXXXXXXXXX"
}
Response
json
{
  "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.

Request body
json
{
  "energy_amount": 131000,
  "duration_minutes": 15,
  "idempotency_key": "your-unique-key-balance-001",
  "payment_mode": "balance",
  "target_address": "TTargetWalletXXXXXXXXXXXXXXXXXXXXX"
}
Response
json
{
  "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
bash
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 (balance)
bash
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 (on-chain)
bash
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"
}'
Response
json
{
  "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.

StatusMeaning
pending_paymentWaiting for on-chain payment
delegatingPayment received or balance charged; delegation in progress
delegatedEnergy delegated
cancelledCancelled before payment (on-chain)
expiredOn-chain payment window elapsed
failedError (for balance, TRX is refunded)
undelegatingCustom lock ended; resource Reclaim awaiting confirmation
completedCustom 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.

POST/api/v2/quick-rent/availability

Parameters

ParameterTypeDescriptionExample
target_addressstringRequired. 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
bash
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"
}'
Response
json
{
  "resource_type": "energy",
  "target_address": "TWLaGaf3k6dbiEWvif1tNLeKuTErk2Tron",
  "available": true,
  "reason": "AVAILABLE",
  "checked_at": "2026-09-30T12:00:00.000Z"
}
Response
json
{
  "resource_type": "energy",
  "target_address": "TWLaGaf3k6dbiEWvif1tNLeKuTErk2Tron",
  "available": false,
  "reason": "ALL_POOLS_BUSY",
  "checked_at": "2026-09-30T12:00:00.000Z"
}
Response
json
{
  "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.

POST/api/v2/quick-rent/calculator

Parameters

ParameterTypeDescriptionExample
wallet_addressstringTRON address to analyzeTXXXXXXXX...XXXX
has_usdtboolean | nullWhether the recipient already holds USDT (affects energy). true, false, or omit.true
Request body
json
{
  "wallet_address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "has_usdt": true
}
cURL
bash
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).

POST/api/v2/quick-rent/quote

Parameters

ParameterTypeDescriptionExample
energy_amountintEnergy amount from the active catalog131000
duration_minutesintRental duration from the catalog15
custom_lock_minutesintegerOptional integer 1–15 inclusive. Energy API only; requires duration_minutes: 15. Omit for existing behavior.5
Response
json
{
  "price_trx": "3.200000",
  "available": true,
  "save_percent": 62,
  "expires_in_sec": 30
}
cURL
bash
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.

POST/api/v2/quick-rent/orders

Parameters

ParameterTypeDescriptionExample
energy_amountintEnergy amount from the catalog131000
duration_minutesintRental duration from the catalog15
idempotency_keystringYour unique order id (8–128 chars)partner-onchain-001
payment_modestringOptional. "onchain" (default) or "balance".balance
payer_addressstringLegacy recipient alias if target_address is omitted. Does not restrict who can pay a new order.TPayer...
target_addressstringResource recipient. Required for balance; for on-chain use this field, or the legacy payer_address alias.TTarget...
custom_lock_minutesintegerOptional integer 1–15 inclusive. Energy API only; requires duration_minutes: 15. Omit for existing behavior.5
Response (on-chain)
json
{
  "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..."
}
Response (balance)
json
{
  "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 (on-chain)
bash
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 (balance)
bash
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.

GET/api/v2/quick-rent/orders/:id

Parameters

ParameterTypeDescriptionExample
idstringOrder id (path parameter)uuid
Response
json
{
  "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
}
Example: one order, multiple delegation transactions
json
{
  "id": "uuid",
  "status": "delegated",
  "delivery_complete": true,
  "txid_delegate": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "txids_delegate": [
    "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
  ]
}
cURL
bash
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.

POST/api/v2/quick-rent/orders/:id/cancel

Parameters

ParameterTypeDescriptionExample
idstringOrder id (path parameter)uuid
cURL
bash
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.

POST/api/v2/quick-rent/orders/:id/set-payer

Parameters

ParameterTypeDescriptionExample
idstringOrder id (path parameter)uuid
payer_addressstringNew paying walletTNewPayer...
cURL
bash
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.

GET/api/v2/quick-rent/balance
Response
json
{ "balance_trx": "150.500000" }
cURL
bash
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.

HTTPerrorWhen
400Invalid bodyInvalid JSON or fields
400INVALID_SKU / SKU_INACTIVEPackage unavailable
400INVALID_PAYER_ADDRESS / INVALID_TARGET_ADDRESSMalformed TRON address
400TARGET_ACCOUNT_NOT_ACTIVATEDEnergy recipient wallet is not activated on TRON (no TRX received yet)
503TRON_ACCOUNT_CHECK_FAILEDCould not verify account status on TRON — try again later
400INSUFFICIENT_BALANCENot enough TRX on balance (balance mode)
401UnauthorizedMissing or invalid API key
403BALANCE_PAYMENT_NOT_ENABLEDBalance payment not enabled for your key
409PENDING_PAYMENT_INTENT_EXISTSThis applies to legacy invoices that require a specified payer. Complete, cancel or wait for that invoice to expire. New invoices accept any sending wallet.
409ACTIVE_DELEGATION_EXISTSTarget already has an active Quick Rent delegation
409POOL_ENERGY_INSUFFICIENTNo free pool energy right now
409IDEMPOTENCY_PAYMENT_MODE_MISMATCHSame idempotency_key with a different payment_mode
429Too Many RequestsRate limit
503—Service temporarily unavailable, retry later
403CUSTOM_LOCK_API_ONLYCustom Locked order creation requires an authenticated Quick Rent API client.
409IDEMPOTENCY_CUSTOM_LOCK_MISMATCHThe same idempotency_key was used with a different custom lock (including adding/removing it).
400INVALID_CUSTOM_LOCKInvalid custom lock: integer 1–15, Energy, duration_minutes: 15 required.
503PAYMENT_WALLETS_BUSY / PAYMENT_WALLET_POOL_DISABLED / PAYMENT_SCANNER_UNAVAILABLEAll 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.

API access & balance paymentTelegram @tronbid

Estimate costs, test Quick Rent, and automate TRON Energy delivery with these resources.