Developers
One REST API. Four ways in.
Everything on this site runs on the same public API. Pick the path that matches what you are building, or read the full OpenAPI reference.
Quickstart — a retail order in three calls
No keys needed. Quote, create, and poll. The order is paid by sending the exact price_sun to pay_to_address — the amount carries a unique micro-tag, so there is no memo and no account.
curl -s https://api.trxvolt.com/v1/rentals/quote \
-H 'content-type: application/json' \
-d '{"energy":65000,"duration_sec":86400}'
# → {"price_sun":…,"base_price_sun":…,"partner_fee_sun":0,...}curl -s https://api.trxvolt.com/v1/rentals \
-H 'content-type: application/json' \
-H 'idempotency-key: 7c1e…' \
-d '{"receiver_address":"TUz4…DXdQT8","energy":65000,"duration_sec":86400}'
# → {"id":"…","price_sun":…,"pay_to_address":"T…",
# "status":"awaiting_payment","pay_deadline":"…"}curl -s https://api.trxvolt.com/v1/rentals/<id>
# awaiting_payment → paid → delegating → delegated (usable, ~3 s)
# → active (final) → expired (term over, energy reclaimed)
# could not serve: refunding → refunded (payment returned)from trxvolt import TrxVolt
c = TrxVolt("https://api.trxvolt.com")
o = c.rentals.create(receiver_address="TUz4…", energy=65_000, duration_sec=86_400)
print("pay exactly", o.price_trx, "TRX to", o.pay_to_address)
o = c.rentals.wait_until_delegated(o.id, timeout=900)By default a rental is reclaimed early once the energy is spent or idle and billed for the time used; pass "hold_for_duration": true to lock it for the whole term. Add "bandwidth": N to rent bandwidth alongside or instead of energy.
Prepaid B2B — no on-chain payment per order
For wallets, exchanges and payment processors with a stream of orders. Top up a TRX balance once (by transfer with a memo — it credits itself), then every order debits the balance and delegates immediately. Authenticate with X-Api-Key; Idempotency-Key is required on order creation.
curl -s 'https://api.trxvolt.com/v1/energy/price?energy=65000&duration_sec=3600' -H 'x-api-key: …'
curl -s https://api.trxvolt.com/v1/energy/balance -H 'x-api-key: …'curl -s https://api.trxvolt.com/v1/energy/orders -H 'x-api-key: …' \
-H 'idempotency-key: <uuid per order>' -H 'content-type: application/json' \
-d '{"receiver_address":"T…","energy":65000,"duration_sec":3600}'
# 402 → balance too low: body says how much, what is available and where to top up- Three branches. /v1/energy, /v1/bandwidth, and /v1/resources for both in one atomic order.
- Large orders split. An order bigger than any single staker is spread across several automatically.
- Self-service cabinet. Balance, statement, orders and withdrawals at /partner.
Gas station — send USDT with zero TRX
Your user has USDT but not a single TRX. Ask us to build the transfer, have the user sign its txID with their own key, submit the signature back. We delegate energy to their address, broadcast, and reclaim — the user never touches TRX and never shares a key. Fees come off your prepaid balance (partner scheme) or from a second TRX transaction the user signs (payg).
POST /v1/relay/build {"kind":"trc20","from":"T…","to":"T…","amount":1000000,"contract":"TR7N…"}
# → {"relay_id":"…","scheme":"partner","energy":…,"cost_sun":…,"user_txid":"…"}
# user signs user_txid locally (wallet), then:
POST /v1/relay/submit {"relay_id":"…","user_signature":"…"}
GET /v1/relay/{id} # signed → paid → delegated → broadcast → confirmedWhat the relay will not do
- Broadcast anything the user did not sign — the signature is verified against the exact raw_data_hex we built.
- Deliver energy before payment is secured, or keep a payment when delivery failed — failed relays refund.
- Touch keys. The SDKs expose a TxIdSigner callback; signing stays in the wallet.
White-label partners
Resell under your own brand. A partner account carries a fee in basis points added on top of our price; your margin accrues per order and is withdrawable in TRX. Partner orders appear in your cabinet with a full ledger of debits, accruals and payouts. Credit limits for trusted volume are available on request.
Get a partner keyStaking — integrate supply in a wallet
Let your users earn with frozen TRX without leaving your wallet. The flow is two calls on our side and two signatures on yours; the SDK decodes the permission bitmap and refuses to build a grant wider than [Vote 4, (WithdrawBalance 13,) Delegate 57, Undelegate 58].
POST /v1/stakers {"owner_address":"T…","with_claim":false}
# → {"id":"…","grant_instruction":{"service_address":"T…","operations_hex":"…",
# "allowed_contract_types":[4,57,58],"min_stake_sun":…}}
# wallet signs AccountPermissionUpdate with that active permission,
# wallet freezes TRX for energy (FreezeBalanceV2), then:
POST /v1/stakers/{id}/verify # → status "active" once the grant is seen on-chainRead before integrating
- The staker keeps the owner permission and can revoke at any time.
- Minimum stake is read from the chain at verify; raising it later is just another freeze.
- Income is paid in TRX to the staker's address; voting rewards land on the account natively.
SDKs
Python
trxvolt
Retail and B2B rentals, relay, stakers. Typed models, polling helpers (wait_until_delegated), idempotency built in.
pip install trxvoltKotlin Multiplatform · Android / iOS / JVM
com.trxvolt:trxvolt
For wallets: all four paths, no key handling — signing is a TxIdSigner callback, transaction bodies come ready to sign.
commonMain.dependencies { implementation("com.trxvolt:trxvolt:0.1.0") }Rate limits apply per IP on business routes (429) and more strictly on /v1/relay/build and /v1/stakers/{id}/verify; under overload you get a 503 and should retry with backoff. All amounts are in sun; all addresses base58.