Energy is delegated to your address within seconds and expires on its own. Pay from your own wallet, with no account and nothing to submit.
Three steps, and the energy expires on its own.
10 minutes for a quick transfer, or 1 hour if you have several to do.
Confirm in TronLink. The wallet sends the exact amount and signs it — nothing to copy, nothing to get wrong.
We watch the chain, detect your payment, and delegate. Nothing to submit, and nothing to cancel.
Tracked in this browser. Nothing is stored on a server for you.
| Order | Energy | Duration | Paid | Status | Transaction |
|---|---|---|---|---|---|
| No orders yet. | |||||
For bots and scripts. Create the account by API call, fund it, then rent energy — no wallet popup per order.
# no account needed to sign up — the key comes back in the response curl -s -X POST https://your-api-host/api/v1/account/signup # 201 {"api_key":"tek_…","deposit_address":"T…","network":"nile"}
curl -s https://your-api-host/api/v1/products
{
"products": [
{
"duration_seconds": 600,
"duration_label": "10 minutes",
"price_sun_per_unit": "42.000000",
"price_trx_per_unit": "0.000042",
"min_units": 32000,
"free_energy": 76978,
"energy_per_trx": 73.663468
}
],
"network": "nile"
}
curl -s https://your-api-host/api/v1/account \ -H "X-API-Key: $API_KEY"
{
"deposit_address": "TFfZnVFL3QNUAvnLXbmDF4amGFCgMr4xVu",
"status": "active",
"balance_sun": "50000000",
"balance_trx": "50.000000",
"rentals": 0,
"ledger": []
}
| field | required | notes |
|---|---|---|
| energy_units | yes | whole number, minimum 32,000 |
| duration_seconds | yes | 600 or 3600 — from /products |
| receive_at | yes | TRON address that receives the energy |
| idempotency_key | yes | your own unique string, one per order. A retry with the same value replays the original result instead of charging twice, so keep it stable while retrying and use a new one for a new order — generate it (a GUID), never count up by hand. |
curl -s -X POST https://your-api-host/api/v1/account/rentals \
-H "X-API-Key: $API_KEY" \
-H "content-type: application/json" \
-d '{
"energy_units": 65000,
"duration_seconds": 600,
"receive_at": "TYwNTbHK7f9yutJ8cfqQXPBi7UDbUA5mFj",
"idempotency_key": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e"
}'
{
"id": 12,
"status": "delegating",
"recipient_address": "TYwNTbHK7f9yutJ8cfqQXPBi7UDbUA5mFj",
"energy_units": 65000,
"duration_seconds": 600,
"charged_sun": "2730000",
"balance_sun": "47270000",
"replayed": false
}
# ---- the same orders from PowerShell ---- # # RENTAL LENGTH - both options, pick either: # $rent = 600 10 minutes 42 sun per unit (32,000 units = 1.344 TRX) # $rent = 3600 1 hour 45 sun per unit (32,000 units = 1.440 TRX) # # RECIPIENTS - your own addresses, separated by COMMAS. One order each. $key = 'YOUR_API_KEY' $Addrs = 'ADDRESS_1', 'ADDRESS_2', 'ADDRESS_3' $rent = 600 $units = 32000 $H = @{ 'X-API-Key' = $key } foreach ($a in $Addrs) { $b = @{ energy_units = $units duration_seconds = $rent receive_at = $a # a fresh key per order: re-running buys again, it does not replay idempotency_key = [guid]::NewGuid().ToString() } | ConvertTo-Json try { $r = Invoke-RestMethod -Uri 'https://your-api-host/api/v1/account/rentals' ` -Method Post -Headers $H -ContentType 'application/json' -Body $b Write-Host "OK $a -> $($r.energy_units) units for $(($rent / 60)) min" } catch { # the API's own words live on ErrorDetails; a plain-string error leaves it empty, # so fall back rather than printing a blank reason $why = $_.ErrorDetails.Message if (-not $why) { $why = $_.Exception.Message } if (-not $why) { $why = "HTTP $([int]$_.Exception.Response.StatusCode)" } Write-Host "FAIL $a $why" } }
| method | path | auth | limit |
|---|---|---|---|
| GET | /api/v1/products | none | — |
| GET | /api/v1/estimate | none | 60/min |
| GET | /api/v1/account | X-API-Key | 60/min |
| POST | /api/v1/account/rentals | X-API-Key | 120/min |
| GET | /api/v1/orders?payer=<address> | none | 120/min |
| GET | /api/v1/orders/<ref> | none | 120/min |
| HTTP | code | meaning |
|---|---|---|
| 401 | unauthorized | the X-API-Key header is missing or the key is unknown |
| 400 | validation_error | a field is missing or malformed — the message names it |
| 402 | insufficient_funds | your prepaid balance does not cover this order. Top up — and the reserve happens before the charge, so a refused order costs you nothing |
| 409 | insufficient_liquidity | the pool cannot cover that many units right now; buy less or retry later |
| 429 | rate_limited | too many requests for that endpoint — see the per-endpoint limits above; retry shortly |
| Day (UTC) | Payments | Earned |
|---|---|---|
| No sales yet. | ||
| Duration | Payments | Energy sold | Earned |
|---|---|---|---|
| No sales yet. | |||
For API buyers. Prepaid credit, spent on energy.
| When (UTC) | What | Amount | Balance after | Reference |
|---|---|---|---|---|
| Sign in to see your activity. | ||||
curl -s https://your-api-host/api/v1/products # 600 = 10 minutes 42 sun per unit 32,000 units = 1.344 TRX # 3600 = 1 hour 45 sun per unit 32,000 units = 1.440 TRX
curl -s https://your-api-host/api/v1/account \ -H "X-API-Key: tek_your_key_here"
curl -s -X POST https://your-api-host/api/v1/account/rentals \
-H "X-API-Key: tek_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"energy_units": 32000,
"duration_seconds": 600,
"receive_at": "TYourReceivingAddress",
"idempotency_key": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e"
}'
# Generate a NEW one per order — a UUID is the easy way, and it cannot collide:
# PowerShell : [guid]::NewGuid().ToString()
# bash : uuidgen (or: cat /proc/sys/kernel/random/uuid)
# Keep the SAME one only while retrying that one order: a retry replays instead of charging twice.
# 201 {"id":12,"status":"delegating","recipient_address":"T...","energy_units":32000,
# "duration_seconds":600,"charged_sun":"1344000","balance_sun":"...","replayed":false}
# ---- many wallets, one order each ----
#
# LENGTH - both options, pick either:
# $rent = 600 10 minutes 42 sun per unit (32,000 units = 1.344 TRX)
# $rent = 3600 1 hour 45 sun per unit (32,000 units = 1.440 TRX)
#
# RECIPIENTS - your own addresses, separated by COMMAS. One order each.
$key = 'tek_your_key_here'
$Addrs = 'ADDRESS_1', 'ADDRESS_2', 'ADDRESS_3'
$rent = 600
$units = 32000
$H = @{ 'X-API-Key' = $key }
foreach ($a in $Addrs) {
$b = @{
energy_units = $units
duration_seconds = $rent
receive_at = $a
# a fresh key per order: re-running buys again, it does not replay
idempotency_key = [guid]::NewGuid().ToString()
} | ConvertTo-Json
try {
$r = Invoke-RestMethod -Uri 'https://your-api-host/api/v1/account/rentals' `
-Method Post -Headers $H -ContentType 'application/json' -Body $b
Write-Host "OK $a -> $($r.energy_units) units for $(($rent / 60)) min"
} catch {
# the API's own words live on ErrorDetails; a plain-string error leaves it empty,
# so fall back rather than printing a blank reason
$why = $_.ErrorDetails.Message
if (-not $why) { $why = $_.Exception.Message }
if (-not $why) { $why = "HTTP $([int]$_.Exception.Response.StatusCode)" }
Write-Host "FAIL $a $why"
}
}
| Call | What it is for |
|---|---|
| GET /api/v1/products | The durations and the price per unit. No key. |
| GET /api/v1/account | Balance, rentals and ledger for your key. |
| POST /api/v1/account/rentals | Spend balance on energy. One address per call. |
| GET /api/v1/orders?payer=T... | Order status. No key — pass the payer address. |
| POST /api/v1/account/deposits/claim | Credit a top-up the watcher missed, by txid. |