> For the complete documentation index, see [llms.txt](https://tron-energy-doc.crypto-chief.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tron-energy-doc.crypto-chief.com/getting-started/readme.md).

# General Information

The **TRON Energy API** rents the energy a TRC-20 transfer needs, so the sending wallet does not burn TRX for it.

A USDT transfer on TRON runs contract code, and the network charges **energy** for that. A wallet holding none pays in burnt TRX at the chain's spot rate, which is the most expensive way there is to move a token on TRON. Energy can be delegated from one account to another, so we hold it and delegate it to your address for the moment of the transfer.

{% hint style="success" %}
**You do not have to know how much energy you need.** Send the recipient's address and leave the amount out — we read the chain and size the order. This is the part most integrations get wrong, and it is the difference between a transfer that lands and one that reverts having consumed the fee.
{% endhint %}

## Base URL

```
https://energy.crypto-chief.com
```

## Authentication

Every request is signed with the project's API key using HMAC-SHA256.

```
Merchant:        <your project UUID>
X-CC-Timestamp:  <Unix time in seconds>
X-CC-Nonce:      <new random value for every request>
X-CC-Signature:  v1=<hex HMAC-SHA256(api_key, string to sign)>
```

**The API key is never sent.** The same key signs requests on every other Crypto Chief API, including ones that move funds.

Both values are in the Dashboard under **Project Settings**. There is no separate key for energy, and a project frozen on the platform cannot buy energy either.

{% tabs %}
{% tab title="JavaScript" %}

```javascript
console.log(await request("GET", "/v1/balance"));
```

{% endtab %}

{% tab title="PHP" %}

```php
print_r(request('GET', '/v1/balance'));
```

{% endtab %}

{% tab title="GO" %}

```go
balance, err := request("GET", "/v1/balance", nil, "")
if err != nil {
	log.Fatal(err)
}
fmt.Println(balance)
```

{% endtab %}

{% tab title="Python" %}

```python
print(request("GET", "/v1/balance"))
```

{% endtab %}

{% tab title="curl" %}

```bash
request GET /v1/balance
```

{% endtab %}
{% endtabs %}

`request()` is defined in [Authentication](/getting-started/authentication.md), together with the string to sign, test values and the authentication errors.

## Billing

Orders are charged to your **platform API credits** — the same balance the rest of the API spends. There is no separate energy balance to top up, and nothing is ever taken out of your wallets.

[`GET /v1/balance`](/api-reference/balance.md) reads it, free and unthrottled. It answers in the same shape the platform's own credits endpoint uses, so if you already parse that one, the code you have works here unchanged.

## The endpoints

| Method | Path                                              | What it does                                  |
| ------ | ------------------------------------------------- | --------------------------------------------- |
| `POST` | [`/v1/simulate`](/api-reference/simulate.md)      | Ask the chain what a transaction really needs |
| `POST` | [`/v1/activate`](/api-reference/activate.md)      | Bring a new address into existence            |
| `POST` | [`/v1/quotes`](/api-reference/quote.md)           | Price a purchase and hold that price briefly  |
| `POST` | [`/v1/orders`](/api-reference/create-order.md)    | Buy energy                                    |
| `GET`  | [`/v1/orders/{key}`](/api-reference/get-order.md) | What became of a request                      |
| `GET`  | [`/v1/balance`](/api-reference/balance.md)        | What you have left to spend                   |

## The shortest possible integration

One call. No quote, no polling — priced, charged and delivered before it answers:

{% tabs %}
{% tab title="JavaScript" %}

```javascript
const order = await request("POST", "/v1/orders", {
  receive_address: "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
}, "payout-8814");
console.log(order);
```

{% endtab %}

{% tab title="PHP" %}

```php
$order = request('POST', '/v1/orders', [
    'receive_address' => 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',
], 'payout-8814');
print_r($order);
```

{% endtab %}

{% tab title="GO" %}

```go
order, err := request("POST", "/v1/orders", map[string]any{
	"receive_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
}, "payout-8814")
if err != nil {
	log.Fatal(err)
}
fmt.Println(order)
```

{% endtab %}

{% tab title="Python" %}

```python
order = request("POST", "/v1/orders", {"receive_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}, "payout-8814")
print(order)
```

{% endtab %}

{% tab title="curl" %}

```bash
request POST /v1/orders '{"receive_address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}' payout-8814
```

{% endtab %}
{% endtabs %}

```json
{
  "id": 4471,
  "idempotency_key": "payout-8814",
  "status": "delivered",
  "receive_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
  "energy": 130285,
  "duration_sec": 3600,
  "price_sun": 5927968,
  "price_trx": "5.927968",
  "price_usd": "1.78",
  "credits": 17783904,
  "trx_usd": "0.30000000",
  "delivered_energy": 130285,
  "settled": true,
  "needs_attention": false,
  "created_at": "2026-08-30T11:42:07Z",
  "delivered_at": "2026-08-30T11:42:11Z"
}
```

Then send your USDT. It consumes the delegated energy instead of burning TRX.

{% hint style="warning" %}
**`Idempotency-Key` is required and has no default.** It is what makes a retry safe: the same key returns the original order rather than buying the energy a second time. We refuse the request rather than invent a key you could not repeat — see [Idempotency](/getting-started/idempotency.md).
{% endhint %}

## Before you build

Two short pages worth reading first, because they prevent the two mistakes that cost money:

* [**How energy works**](/getting-started/how-energy-works.md) — why the same transfer costs 64,285 energy to one address and 130,285 to another, what `OUT_OF_ENERGY` means, and why bandwidth is a separate problem.
* [**Idempotency and retries**](/getting-started/idempotency.md) — what to do when a request times out, and the one state where retrying is the wrong move.
