API MarketPlace — TRON Energy and Bandwidth
Buy resources from Marketplace participants, place bids and manage seller offers through a dedicated TronBid API.
- Energy and Bandwidth
- 3 purchase modes
- Seller Offers and signing
- Version
- v2 · REST / JSON
- Updated
- 06.10.2026
- Base URL
- https://tronbid.com/api/v2/marketplace
On this page
Integration
From API key to TXID
- 1
Request a separate Marketplace key from support. Check GET /account and GET /capabilities.
- 2
Choose a purchase mode, request POST /quotes, then POST /orders. Use payment_mode: balance to pay from the shared balance.
- 3
Read GET /orders/{id} or webhook events. Delegation is complete when delivery_complete=true; txids_delegate contains the hashes. Order creation alone does not confirm delivery.
const base = "https://tronbid.com/api/v2/marketplace";
const headers = { Authorization: "Bearer " + process.env.TRONBID_MARKETPLACE_KEY };
async function write(path, body, key = crypto.randomUUID()) {
const response = await fetch(base + path, {
method: "POST",
headers: { ...headers, "Content-Type": "application/json", "Idempotency-Key": key },
body: JSON.stringify(body)
});
const result = await response.json();
if (!response.ok) throw new Error(JSON.stringify(result.error));
return result.data;
}
const quote = await write("/quotes", {
mode: "best", resource_type: "energy", resource_amount: 131000,
duration: { type: "minutes", value: 15 },
recipient_address: "YOUR_TRON_RECEIVER_ADDRESS",
max_price_sun: 50, max_total_trx: "6.550000",
allow_partial: true, wait_seconds: 900
});
const order = await write("/orders", {
quote_id: quote.quote_id, payment_mode: "balance",
external_id: "invoice-2026-0001"
});
const response = await fetch(base + "/orders/" + order.id, { headers });
const { data: state } = await response.json();
console.log(state.status, state.delivery_complete, state.txids_delegate);Access and independent keys
Request a key from @tronbid on Telegram or support@tronbid.com after signing in with your account wallet. An administrator issues a dedicated tbm_ key with read, buy, sell, offers, wallets and webhooks scopes. Quick Rent and Seller Delegate API keys do not grant access.
Base URL: https://tronbid.com/api/v2/marketplace. Use Authorization: Bearer tbm_… over HTTPS. Your account balance is shared with the website and Quick Rent; Marketplace API operations have separate records. There are no spending limits. Administrators configure request rate and allowed IPs.
Request a separate key · @tronbidResponses and retries
Success: {data: …, request_id: UUID}. Error: {error: {code, details?}, request_id: UUID}. TRX values in quotes, orders and statistics are decimal strings; manual trade fields retain their numeric format. OpenAPI defines each field type. Calculations use SUN, with 1 TRX = 1,000,000 SUN.
Every POST, PATCH, PUT and DELETE requires an Idempotency-Key of 8–128 letters, digits or . _ : -. Repeating the same request with the same key returns its original result. Use a new key for a new operation. Idempotency is scoped to your API key identity.
After a timeout, repeat the original request with the same key. 409 REQUEST_IN_PROGRESS means it is still running; IDEMPOTENCY_CONFLICT means the body or path differs. For 429 RATE_LIMITED, honor Retry-After. An accepted order is not delivery confirmation; check delivery_complete.
For buyers
Market data and pricing
GET /capabilities returns current minimums and durations: energy and bandwidth; 15 minutes, 1 hour, or 1–30 days. GET /market?side=offers lists seller offers; side=bids lists buyer orders. Use resource_type, limit (1–100) and offset to page results.
price_sun is the price per resource unit for the entire minutes/hours rental, or per day for days. Total = amount × price_sun × days (multiplier 1 for 15 minutes or 1 hour). Marketplace commission comes from seller proceeds; there is no additional buyer fee.
Availability uses recent verified seller resource snapshots, timestamped by resources_checked_at. A quote does not reserve resources. Reading the market does not trigger a blockchain poll per request. Only Marketplace participants fulfill these orders; there is no own-pool or Chinese provider fallback.
Availability, price and transfer estimates
GET /resources sums available seller resources without counting the same wallet twice. Filter by resource, term and price. This is a snapshot, not a reservation.
GET /price previews price and availability without persisting a quote. Purchase with POST /quotes or POST /orders/instant and an explicit budget limit. Each fulfillment payment follows Marketplace rounding; use the returned quote amount.
GET /estimate-energy simulates the token transfer(address,uint256) for the specific from_address and to_address. amount uses token base units. fee_trx is the network burn cost, not a rental price. Results are cached for 15 seconds per parameter combination. A failed simulation returns 422, not an assumed estimate.
Three purchase modes
POST /quotes with mode, resource_type, resource_amount, duration:{type,value}, recipient_address. bid posts your price_sun; offer selects offer_id; best selects the cheapest matching offers within max_price_sun and/or max_total_trx. An offer purchase can also set a unit-price cap.
Quotes expire in 60 seconds. POST /orders accepts quote_id, payment_mode (balance or onchain) and optional external_id. Each quote creates one order; external_id is unique within your account. The maximum budget is fixed and never increased automatically.
allow_partial=true permits multiple sellers and partial delivery. With false, offer/best reserves the full amount atomically before fulfillment starts; a bid must be accepted in full by one seller. wait_seconds is 30 seconds–30 days, default 900 seconds. Accepted parts retain their agreed terms.
Payments, cancellation and batches
balance reserves the budget atomically when creating the order; allocating seller parts does not debit you again. onchain creates a payment-pending order: call POST /orders/{id}/payment and transfer the specified TRX amount from payer_address. Invoices last 15 minutes. Excess payment is credited to your account balance.
POST /orders/{id}/cancel stops new matching and returns unallocated funds to your shared balance. Accepted or signed delegations must first be reconciled. A matching deadline follows the same rules. Refunds of failed prepaid parts use Marketplace rules.
POST /orders/batch accepts {orders:[{quote_id,payment_mode,external_id},…]}, up to 20 entries. Creation is atomic: one invalid entry rolls back the entire batch. Use one Idempotency-Key for the batch.
For sellers
Wallets and automatic offers
Register multiple wallets. POST /wallet-challenges with address returns message and challenge_id. Sign the message with TronWeb.trx.signMessageV2, then POST /wallets with challenge_id, signatures and automatic. Challenges expire in 5 minutes; multisig requires the owner threshold. Never send private keys.
Register with automatic=false, call POST /wallets/{id}/prepare-permission, then sign and broadcast the returned transaction using your wallet. After confirmation, obtain a fresh challenge and register again with automatic=true so the API verifies the on-chain permission. Preparation does not broadcast; the wallet owner pays the network fee. GET /wallets exposes permission status and resource snapshots. PATCH /wallets/{id} with enabled:false disables new wallet operations.
POST /offers accepts wallet_id, resource_type, resource_amount, duration, price_sun, auto_repeat, paused. The seller sets every price. PATCH /offers/{id} changes price_sun, free_amount, duration, paused, auto_repeat, or cancel:true. Used terms are replaced under a new ID: the response includes replaces_offer_id and the old offer exposes replaced_by. Existing reservations keep their terms. Follow repeat_source_offer_id for automatic repeats.
// write() uses the same authenticated POST helper as the buyer example.
// tronWeb is connected to the seller's wallet; keys stay on the client.
async function register(automatic) {
const challenge = await write("/wallet-challenges", {
address: tronWeb.defaultAddress.base58
});
const signature = await tronWeb.trx.signMessageV2(challenge.message);
return write("/wallets", {
challenge_id: challenge.challenge_id,
signatures: [signature], automatic
});
}
const wallet = await register(false);
const permission = await write(
"/wallets/" + wallet.id + "/prepare-permission", {}
);
const signed = await tronWeb.trx.sign(permission.transaction);
const sent = await tronWeb.trx.sendRawTransaction(signed);
if (!sent.result) throw new Error("Permission transaction rejected");
// Wait for a confirmed successful transaction before enabling automatic mode.
let confirmed = false;
for (let attempt = 0; attempt < 40; attempt++) {
await new Promise(resolve => setTimeout(resolve, 3000));
const receipt = await tronWeb.trx.getTransactionInfo(sent.txid);
const confirmedTransaction = await tronWeb.trx.getTransaction(sent.txid);
if (receipt.id && confirmedTransaction.ret?.[0]?.contractRet === "SUCCESS") {
confirmed = true;
break;
}
}
if (!confirmed) throw new Error("Check permission transaction before proceeding");
const ready = await register(true);
const offer = await write("/offers", {
wallet_id: ready.id, resource_type: "energy", resource_amount: 1000000,
duration: { type: "minutes", value: 15 },
price_sun: 20, auto_repeat: true, paused: false
});
console.log(offer.id, offer.wallet_id, offer.status);Fulfill bids with your own signature
Find a bid through GET /market?side=bids. POST /trades with order_id, wallet_id and resource_amount claims it for 3 minutes. The response includes source/recipient, delegate_balance_sun and lock_period_blocks.
Build and locally sign a matching DelegateResourceContract, then POST /trades/{id}/delegate with {signed_transaction:{…}}. The signed transaction is persisted before broadcast and recovered after interruptions. POST /trades/{id}/cancel only releases an unsubmitted claim. Unsigned expired claims are released automatically.
GET /trades/{id} shows status, commission, expected payout, delegate_txid and payout_txid. Payouts follow the account's TRX/USDT settings and website rules. Automatic Seller Offers use the granted permission; local signing is needed only for this separate manual flow.
// Claim an eligible buyer bid, then use the exact returned amounts.
const claim = await write("/trades", {
order_id: "BUYER_ORDER_UUID", wallet_id: "YOUR_REGISTERED_WALLET_UUID",
resource_amount: 131000
});
const transaction = await tronWeb.transactionBuilder.delegateResource(
Number(claim.delegate_balance_sun), claim.recipient_address,
claim.resource_type.toUpperCase(), claim.source_address,
true, Number(claim.lock_period_blocks)
);
const signed = await tronWeb.trx.sign(transaction);
// Persist signed and the Idempotency-Key before this call.
// On timeout, resend the SAME signed transaction and key, not a new delegation.
const result = await write("/trades/" + claim.trade_id + "/delegate", {
signed_transaction: signed
}, "UNIQUE_PERSISTED_DELEGATION_KEY");
console.log(result.status, result.delegate_txid, result.payout_txid);Events and accounting
Balance, deposits and statistics
GET /account returns the shared balance, key permissions and today/yesterday/lifetime usage. GET /statistics breaks down Energy/Bandwidth, purchases, seller gross revenue, commission and earnings.
Today and yesterday are calendar days in Europe/Moscow by default; UTC is supported. week covers the last 7 days, month 30, rolling the last days days. Only confirmed Marketplace API fills are counted, not unrelated Quick Rent activity.
GET /account/recharge returns the address and can_recharge. Send TRX only from payer_address, without paying other invoices concurrently from that wallet. This checks current state; it does not lock the wallet. Confirmed credits appear in GET /account/deposits.
Statuses, TXIDs and history
Poll GET /orders/{id}: awaiting_payment → waiting → partially_delegated → delegated. Other states include cancelling, cancelled and expired. After partial delivery inspect delivered_amount and remaining_amount. delivery_complete=true means the entire requested amount was delivered.
txid_delegate is the first confirmed hash; txids_delegate contains all hashes. fulfillments and trades contain parts, refunds and payout details. Explorer URL: https://tronscan.org/#/transaction/{txid}. An order ID alone is not proof of delivery.
GET /orders?external_id=… finds your reference. GET /events?after=0 returns ascending events and next_cursor. GET /statistics?days=30 separates purchases from sales. Seller proceeds and commission are based on confirmed operations.
Signed notifications
PUT /webhook with {url:"https://…"} configures the current key; url:null disables delivery. Your administrator supplies the signing secret with the API key. Only public HTTPS URLs are accepted; redirects are not followed.
Verify X-TronBid-Signature: v1=HMAC_SHA256(secret, timestamp + "." + rawBody), using X-TronBid-Timestamp. Compare in constant time, reject old timestamps and deduplicate X-TronBid-Event-Id. Verify before parsing JSON.
Return HTTP 2xx after durably recording the event. Delivery is at least once; duplicates and reordering are possible. Up to 12 attempts use delays from 30 seconds to 1 hour. Events are snapshots; fetch the entity for current status. Recover missed events through GET /events.
import { createHmac, timingSafeEqual } from "node:crypto";
function verifyWebhook(rawBody, timestamp, signature, secret) {
if (!/^\d+$/.test(timestamp) || Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
if (!/^v1=[a-f0-9]{64}$/.test(signature)) return false;
const expected = createHmac("sha256", secret).update(timestamp + "." + rawBody).digest();
return timingSafeEqual(expected, Buffer.from(signature.slice(3), "hex"));
}API reference
Replace the key, addresses and UUIDs with your values. Example prices are illustrative; use the returned quote.
GET/resourcesAvailable seller resources
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
resource_typeOptional | enum | Resource: energy or bandwidth. energy · bandwidth |
duration_typeOptional | enum | Rental unit: minutes, hours, days. minutes · hours · days |
duration_valueOptional | integer | 15 for minutes; 1 for hours; 1–30 for days. |
min_price_sunOptional | integer | Minimum unit price in SUN. |
max_price_sunOptional | integer | Maximum unit price. Never raised automatically. |
min_amountOptional | integer | Minimum available volume per entry. |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/resources' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/priceRead-only price preview
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
resource_amountRequired | integer | Number of resource units. Minimums: GET /capabilities. |
resource_typeOptional | enum | Resource: energy or bandwidth. energy · bandwidth |
duration_typeOptional | enum | Rental unit: minutes, hours, days. minutes · hours · days |
duration_valueOptional | integer | 15 for minutes; 1 for hours; 1–30 for days. default: 15 |
recipient_addressOptional | string | TRON wallet that receives the resource. |
offer_idOptional | string | Offer ID from GET /market?side=offers. |
max_price_sunOptional | integer | Maximum unit price. Never raised automatically. |
max_total_trxOptional | string | Maximum TRX budget, decimal string with up to 6 decimals. |
allow_partialOptional | boolean | Allow partial fills across multiple sellers. default: true |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/price?resource_amount=131000&max_price_sun=50' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/estimate-energyEstimate a token transfer
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
from_addressRequired | string | Token sender; used in the simulation. |
to_addressRequired | string | Token receiver; account state affects Energy. |
contract_addressOptional | string | TRC20 contract; defaults to TRON USDT. default: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t |
amountOptional | string | Token amount in base units. USDT: 1,000,000 = 1 USDT. default: 1000000 |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/estimate-energy?from_address=YOUR_TRON_WALLET_ADDRESS&to_address=RECIPIENT_TRON_ADDRESS&amount=1000000' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/account/rechargeBalance recharge instructions
Key scope: read
curl --request GET \
'https://tronbid.com/api/v2/marketplace/account/recharge' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/account/depositsDeposit history
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
limitOptional | integer | Page size: 1–100; default 50. ≥ 1 · ≤ 100 · default: 50 |
offsetOptional | integer | Number of records to skip. ≥ 0 · ≤ 100000 · default: 0 |
sinceOptional | string | Inclusive start, ISO 8601 with timezone. |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/account/deposits' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/orders/queueActive order queue
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
limitOptional | integer | Page size: 1–100; default 50. ≥ 1 · ≤ 100 · default: 50 |
offsetOptional | integer | Number of records to skip. ≥ 0 · ≤ 100000 · default: 0 |
resource_typeOptional | enum | Resource: energy or bandwidth. energy · bandwidth |
modeOptional | enum | bid: your price; offer: a selected offer; best: cheapest eligible offers. bid · offer · best |
statusOptional | enum | Status filter; allowed values are listed below. awaiting_payment · waiting · partially_delegated · delegated · cancelling · cancelled · expired · filled |
sinceOptional | string | Inclusive start, ISO 8601 with timezone. |
untilOptional | string | Exclusive end, ISO 8601 with timezone. |
sortOptional | enum | Sort order. price: unit price; income: gross value; amount: available volume. newest · oldest |
external_idOptional | string | Your order identifier, unique within the account. |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/orders/queue' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"POST/orders/instantCreate an order in one request
Key scope: buy
Parameters
| Field | Type | Description |
|---|---|---|
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
purchaseRequired | object | Same purchase parameters as POST /quotes. |
purchase.modeRequired | enum | bid: your price; offer: a selected offer; best: cheapest eligible offers. bid · offer · best |
purchase.resource_typeRequired | enum | Resource: energy or bandwidth. energy · bandwidth |
purchase.resource_amountRequired | integer | Number of resource units. Minimums: GET /capabilities. ≥ 1 · ≤ 500000000 |
purchase.durationRequired | object | 15 minutes, 1 hour or 1–30 days. |
purchase.duration.typeRequired | enum | Rental unit: minutes, hours, days. minutes · hours · days |
purchase.duration.valueRequired | integer | 15 for minutes; 1 for hours; 1–30 for days. ≥ 1 · ≤ 30 |
purchase.recipient_addressRequired | string | TRON wallet that receives the resource. |
purchase.offer_idOptional | string | Offer ID from GET /market?side=offers. |
purchase.price_sunOptional | integer | SUN per resource unit; per day for days rentals. ≥ 1 · ≤ 1000000 |
purchase.max_price_sunOptional | integer | Maximum unit price. Never raised automatically. ≥ 1 · ≤ 1000000 |
purchase.max_total_trxOptional | string | Maximum TRX budget, decimal string with up to 6 decimals. |
purchase.allow_partialOptional | boolean | Allow partial fills across multiple sellers. default: true |
purchase.wait_secondsOptional | integer | Matching deadline: 30–2,592,000 seconds; default 900. ≥ 30 · ≤ 2592000 · default: 900 |
payment_modeOptional | enum | balance: shared balance; onchain: a TRX transfer invoice. balance · onchain |
external_idOptional | string | Your order identifier, unique within the account. |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/orders/instant' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"purchase": {
"mode": "best",
"resource_type": "energy",
"resource_amount": 131000,
"duration": {
"type": "minutes",
"value": 15
},
"recipient_address": "YOUR_TRON_WALLET_ADDRESS",
"max_price_sun": 50,
"max_total_trx": "6.550000",
"allow_partial": true,
"wait_seconds": 900
},
"payment_mode": "balance",
"external_id": "invoice-001"
}'GET/wallets/{id}Wallet and resource snapshot
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/wallets/00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"PATCH/wallets/{id}Enable or disable a wallet
Key scope: wallets
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
enabledRequired | boolean | false disables new wallet operations and pauses its offers. |
curl --request PATCH \
'https://tronbid.com/api/v2/marketplace/wallets/00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"enabled": false
}'POST/wallets/{id}/prepare-permissionPrepare seller permission
Key scope: wallets
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/wallets/00000000-0000-4000-8000-000000000001/prepare-permission' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{}'GET/offers/{id}/reservationsFulfillments, payouts and resource return
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
limitOptional | integer | Page size: 1–100; default 50. ≥ 1 · ≤ 100 · default: 50 |
offsetOptional | integer | Number of records to skip. ≥ 0 · ≤ 100000 · default: 0 |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/offers/00000000-0000-4000-8000-000000000001/reservations' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/capabilitiesMarketplace capabilities
Key scope: read
curl --request GET \
'https://tronbid.com/api/v2/marketplace/capabilities' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/accountAccount, balance and usage
Key scope: read
curl --request GET \
'https://tronbid.com/api/v2/marketplace/account' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/marketMarket bids and offers
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
limitOptional | integer | Page size: 1–100; default 50. ≥ 1 · ≤ 100 · default: 50 |
offsetOptional | integer | Number of records to skip. ≥ 0 · ≤ 100000 · default: 0 |
sideOptional | enum | offers: seller offers; bids: buyer requests. offers · bids |
resource_typeOptional | enum | Resource: energy or bandwidth. energy · bandwidth |
duration_typeOptional | enum | Rental unit: minutes, hours, days. minutes · hours · days |
duration_valueOptional | integer | 15 for minutes; 1 for hours; 1–30 for days. |
min_price_sunOptional | integer | Minimum unit price in SUN. |
max_price_sunOptional | integer | Maximum unit price. Never raised automatically. |
min_amountOptional | integer | Minimum available volume per entry. |
sortOptional | enum | Sort order. price: unit price; income: gross value; amount: available volume. price_asc · price_desc · income_desc · amount_desc · newest · oldest |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/market?side=offers&resource_type=energy&sort=price_asc' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"POST/quotesCreate a purchase quote
Key scope: buy
Parameters
| Field | Type | Description |
|---|---|---|
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
modeRequired | enum | bid: your price; offer: a selected offer; best: cheapest eligible offers. bid · offer · best |
resource_typeRequired | enum | Resource: energy or bandwidth. energy · bandwidth |
resource_amountRequired | integer | Number of resource units. Minimums: GET /capabilities. ≥ 1 · ≤ 500000000 |
durationRequired | object | 15 minutes, 1 hour or 1–30 days. |
duration.typeRequired | enum | Rental unit: minutes, hours, days. minutes · hours · days |
duration.valueRequired | integer | 15 for minutes; 1 for hours; 1–30 for days. ≥ 1 · ≤ 30 |
recipient_addressRequired | string | TRON wallet that receives the resource. |
offer_idOptional | string | Offer ID from GET /market?side=offers. |
price_sunOptional | integer | SUN per resource unit; per day for days rentals. ≥ 1 · ≤ 1000000 |
max_price_sunOptional | integer | Maximum unit price. Never raised automatically. ≥ 1 · ≤ 1000000 |
max_total_trxOptional | string | Maximum TRX budget, decimal string with up to 6 decimals. |
allow_partialOptional | boolean | Allow partial fills across multiple sellers. default: true |
wait_secondsOptional | integer | Matching deadline: 30–2,592,000 seconds; default 900. ≥ 30 · ≤ 2592000 · default: 900 |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/quotes' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"mode": "best",
"resource_type": "energy",
"resource_amount": 131000,
"duration": {
"type": "minutes",
"value": 15
},
"recipient_address": "YOUR_TRON_WALLET_ADDRESS",
"max_price_sun": 50,
"max_total_trx": "6.550000",
"allow_partial": true,
"wait_seconds": 900
}'POST/ordersPlace a quoted order
Key scope: buy
Parameters
| Field | Type | Description |
|---|---|---|
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
quote_idRequired | string | Quote ID from POST /quotes; valid for 60 seconds. |
payment_modeOptional | enum | balance: shared balance; onchain: a TRX transfer invoice. balance · onchain |
external_idOptional | string | Your order identifier, unique within the account. |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/orders' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"quote_id": "00000000-0000-4000-8000-000000000001",
"payment_mode": "balance",
"external_id": "invoice-001"
}'GET/ordersOrder history and search
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
limitOptional | integer | Page size: 1–100; default 50. ≥ 1 · ≤ 100 · default: 50 |
offsetOptional | integer | Number of records to skip. ≥ 0 · ≤ 100000 · default: 0 |
external_idOptional | string | Your order identifier, unique within the account. |
resource_typeOptional | enum | Resource: energy or bandwidth. energy · bandwidth |
modeOptional | enum | bid: your price; offer: a selected offer; best: cheapest eligible offers. bid · offer · best |
statusOptional | enum | Status filter; allowed values are listed below. awaiting_payment · waiting · partially_delegated · delegated · cancelling · cancelled · expired · filled |
sinceOptional | string | Inclusive start, ISO 8601 with timezone. |
untilOptional | string | Exclusive end, ISO 8601 with timezone. |
sortOptional | enum | Sort order. price: unit price; income: gross value; amount: available volume. newest · oldest |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/orders' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"POST/orders/batchCreate up to 20 orders atomically
Key scope: buy
Parameters
| Field | Type | Description |
|---|---|---|
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
ordersRequired | array | Up to 20 PlaceOrder objects; the whole batch is atomic. |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/orders/batch' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"orders": [
{
"quote_id": "00000000-0000-4000-8000-000000000001",
"payment_mode": "balance",
"external_id": "invoice-001"
}
]
}'GET/orders/{id}Order, fulfillments and TXIDs
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/orders/00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"POST/orders/{id}/paymentOrder payment instructions
Key scope: buy
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/orders/00000000-0000-4000-8000-000000000001/payment' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{}'POST/orders/{id}/cancelCancel the unfilled remainder
Key scope: buy
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/orders/00000000-0000-4000-8000-000000000001/cancel' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{}'POST/wallet-challengesRequest an ownership challenge
Key scope: wallets
Parameters
| Field | Type | Description |
|---|---|---|
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
addressRequired | string | TRON address you control. |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/wallet-challenges' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"address": "YOUR_TRON_WALLET_ADDRESS"
}'POST/walletsVerify and register a wallet
Key scope: wallets
Parameters
| Field | Type | Description |
|---|---|---|
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
challenge_idRequired | string | One-time ownership challenge ID; expires in 5 minutes. |
signaturesRequired | array | signMessageV2 signatures of message; multisig must meet owner threshold. |
automaticOptional | boolean | true verifies the TronBid resource delegation/return permission. default: false |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/wallets' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"challenge_id": "00000000-0000-4000-8000-000000000001",
"signatures": [
"SIGN_MESSAGE_V2_SIGNATURE"
],
"automatic": false
}'GET/walletsRegistered wallets
Key scope: read
curl --request GET \
'https://tronbid.com/api/v2/marketplace/wallets' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"POST/offersCreate a Seller Offer
Key scope: offers
Parameters
| Field | Type | Description |
|---|---|---|
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
wallet_idRequired | string | Registered wallet ID from GET /wallets. |
resource_typeRequired | enum | Resource: energy or bandwidth. energy · bandwidth |
resource_amountRequired | integer | Number of resource units. Minimums: GET /capabilities. ≥ 1 · ≤ 500000000 |
durationRequired | object | 15 minutes, 1 hour or 1–30 days. |
duration.typeRequired | enum | Rental unit: minutes, hours, days. minutes · hours · days |
duration.valueRequired | integer | 15 for minutes; 1 for hours; 1–30 for days. ≥ 1 · ≤ 30 |
price_sunRequired | integer | SUN per resource unit; per day for days rentals. ≥ 1 · ≤ 1000000 |
auto_repeatOptional | boolean | Automatically create successor offers under Marketplace rules. |
pausedOptional | boolean | true pauses new purchases; accepted fills continue. |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/offers' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"wallet_id": "00000000-0000-4000-8000-000000000001",
"resource_type": "energy",
"resource_amount": 1000000,
"duration": {
"type": "minutes",
"value": 15
},
"price_sun": 20,
"auto_repeat": true,
"paused": false
}'GET/offersMy seller offers
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
limitOptional | integer | Page size: 1–100; default 50. ≥ 1 · ≤ 100 · default: 50 |
offsetOptional | integer | Number of records to skip. ≥ 0 · ≤ 100000 · default: 0 |
wallet_idOptional | string | Registered wallet ID from GET /wallets. |
statusOptional | enum | Status filter; allowed values are listed below. draft · active · pending_match · filled · cancelled · expired · paused_no_energy · paused_no_bandwidth · paused_permission · paused_fee_resource |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/offers' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/offers/{id}Offer and remaining volume
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/offers/00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"PATCH/offers/{id}Price, volume, term, pause and repeat
Key scope: offers
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
price_sunOptional | integer | SUN per resource unit; per day for days rentals. ≥ 1 · ≤ 1000000 |
free_amountOptional | integer | New unallocated volume, excluding filled and reserved units. ≥ 0 · ≤ 500000000 |
durationOptional | object | 15 minutes, 1 hour or 1–30 days. |
duration.typeRequired | enum | Rental unit: minutes, hours, days. minutes · hours · days |
duration.valueRequired | integer | 15 for minutes; 1 for hours; 1–30 for days. ≥ 1 · ≤ 30 |
pausedOptional | boolean | true pauses new purchases; accepted fills continue. |
auto_repeatOptional | boolean | Automatically create successor offers under Marketplace rules. |
cancelOptional | boolean | true cancels the free remainder and disables repeat. |
curl --request PATCH \
'https://tronbid.com/api/v2/marketplace/offers/00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"price_sun": 22,
"free_amount": 500000,
"duration": {
"type": "minutes",
"value": 15
},
"paused": false,
"auto_repeat": true
}'POST/tradesClaim a buyer bid
Key scope: sell
Parameters
| Field | Type | Description |
|---|---|---|
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
order_idRequired | string | Buyer order ID. |
wallet_idRequired | string | Registered wallet ID from GET /wallets. |
resource_amountRequired | integer | Number of resource units. Minimums: GET /capabilities. ≥ 1 · ≤ 500000000 |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/trades' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"order_id": "00000000-0000-4000-8000-000000000001",
"wallet_id": "00000000-0000-4000-8000-000000000001",
"resource_amount": 131000
}'GET/tradesMy manual trades
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
limitOptional | integer | Page size: 1–100; default 50. ≥ 1 · ≤ 100 · default: 50 |
offsetOptional | integer | Number of records to skip. ≥ 0 · ≤ 100000 · default: 0 |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/trades' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/trades/{id}Seller trade status
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/trades/00000000-0000-4000-8000-000000000001' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"POST/trades/{id}/delegateSubmit a signed delegation
Key scope: sell
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
signed_transactionRequired | object | Complete signed DelegateResourceContract. Never send private keys. |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/trades/00000000-0000-4000-8000-000000000001/delegate' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"signed_transaction": {
"txID": "SIGNED_TRANSACTION_ID",
"raw_data": {
"contract": [
"FULL_CONTRACT_FROM_TRONWEB"
]
},
"raw_data_hex": "FULL_HEX_FROM_TRONWEB",
"signature": [
"YOUR_SIGNATURE"
]
}
}'POST/trades/{id}/cancelRelease an unexecuted claim
Key scope: sell
Parameters
| Field | Type | Description |
|---|---|---|
idRequired | string | Object UUID returned by the API. |
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
curl --request POST \
'https://tronbid.com/api/v2/marketplace/trades/00000000-0000-4000-8000-000000000001/cancel' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{}'GET/eventsCursor-based event stream
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
limitOptional | integer | Page size: 1–100; default 50. ≥ 1 · ≤ 100 · default: 50 |
afterOptional | string | Last processed event cursor; start at 0. default: 0 |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/events?after=0&limit=50' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/statisticsPurchase, sales and earnings statistics
Key scope: read
Parameters
| Field | Type | Description |
|---|---|---|
daysOptional | integer | Rolling window: 1–3660 days; default 30. ≥ 1 · ≤ 3660 · default: 30 |
periodOptional | enum | rolling: last days; today/yesterday in timezone; week: 7 days; month: 30; all: lifetime. rolling · today · yesterday · week · month · all |
timezoneOptional | enum | Calendar zone: Europe/Moscow or UTC. Europe/Moscow · UTC |
curl --request GET \
'https://tronbid.com/api/v2/marketplace/statistics?period=today' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"GET/webhookCurrent webhook URL
Key scope: webhooks
curl --request GET \
'https://tronbid.com/api/v2/marketplace/webhook' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY"PUT/webhookConfigure or disable a webhook
Key scope: webhooks
Parameters
| Field | Type | Description |
|---|---|---|
Idempotency-KeyRequired | string | Unique operation key; preserve it and the body when retrying. |
urlRequired | string | null | Public HTTPS webhook URL; null disables delivery. |
curl --request PUT \
'https://tronbid.com/api/v2/marketplace/webhook' \
--header "Authorization: Bearer $TRONBID_MARKETPLACE_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: REPLACE_WITH_UNIQUE_OPERATION_KEY' \
--data '{
"url": "https://your-service.example/tronbid/events"
}'