TRON Energy API

Official API documentation for Energy.Store - TRON energy rental service

Getting Started

You will need the API_ID and API_KEY, which you can obtain here.

All requests to the API should include authentication headers:

  • Content-Type: application/json
  • X-API-ID: your_api_id
  • SIGNATURE: your_signature

The signature is calculated using HMAC SHA-256 with your API_KEY as the secret.

Create Order

To place an order for energy rental, you need to send a POST request with the parameters:

URL

POST https://energy.store/api/createOrder

Parameters

Name Type Required Description
quantity INT Yes Required energy amount. Min. 65000 / Max. 5000000
period INT Yes Rental period in hours. Available: 1/24/72/720
receiver STRING Yes Wallet address to receive energy.
callback_url STRING No A notification will be sent to this address if the delegation is completed or canceled
outter_id STRING No This information will be included in the callback to help the recipient associate the orders

Response Example (Success)

{
  "status": "created",
  "orderID": "a60efbea-1161-46d5-bcd1-c54fc80908f3",
  "cost": 3.25,
  "balance": 105.77
}
  • status — order status.
  • orderID — unique order identifier.
  • cost — energy rental fee in TRX.
  • balance — current balance of funds in your account.

Response Example (Error)

{
  "status": "error",
  "message": "Your account balance is insufficient for energy rental"
}
  • status — order status.
  • message — error description.

Code Examples

<?php

$API_ID = 1;
$API_KEY = "AA85A2111B4E76R3E181160EB23E51851D48403A756134E7D0CF845406ABFBA9";

$data = [
    'quantity' => 65000,
    'period' => 1,
    'receiver' => 'TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
    'callback_url' => 'https://domain.name/callback',
    'outter_id' => 'your order id',
];

ksort($data);

$jsondata = json_encode($data, JSON_UNESCAPED_SLASHES);
$signature = hash_hmac('sha256', $jsondata, $API_KEY);

$ch = curl_init("https://energy.store/api/createOrder");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsondata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "X-API-ID: $API_ID",
    "SIGNATURE: $signature"
]);

$result = curl_exec($ch);
curl_close($ch);
var_dump($result);

?>
import hashlib
import hmac
import json
import requests

API_ID = 1
API_KEY = "AA85A2111B4E76R3E181160EB23E51851D48403A756134E7D0CF845406ABFBA9"

data = {
    'quantity': 65000,
    'period': 1,
    'receiver': 'TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
    'callback_url': 'https://domain.name/callback',
    'outter_id': 'your order id',
}

json_data = json.dumps(data, sort_keys=True, separators=(',', ':'))

signature = hmac.new(
    API_KEY.encode(),
    json_data.encode(),
    hashlib.sha256
).hexdigest()

headers = {
    'Content-Type': 'application/json',
    'X-API-ID': str(API_ID),
    'SIGNATURE': signature,
}

response = requests.post("https://energy.store/api/createOrder", data=json_data, headers=headers)
print(response.json())
const axios = require('axios');
const crypto = require('crypto');

const API_ID = 1;
const API_KEY = "AA85A2111B4E76R3E181160EB23E51851D48403A756134E7D0CF845406ABFBA9";

const data = {
    quantity: 65000,
    period: 1,
    receiver: 'TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
    callback_url: 'https://domain.name/callback',
    outter_id: 'your order id'
};

const jsonData = JSON.stringify(data);

const signature = crypto
    .createHmac('sha256', API_KEY)
    .update(jsonData)
    .digest('hex');

const headers = {
    'Content-Type': 'application/json',
    'X-API-ID': API_ID,
    'SIGNATURE': signature
};

axios.post('https://energy.store/api/createOrder', jsonData, { headers })
    .then(response => {
        console.log('Response:', response.data);
    })
    .catch(error => {
        console.error('Error:', error.response ? error.response.data : error.message);
    });
using System;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        int API_ID = 1;
        string API_KEY = "AA85A2111B4E76R3E181160EB23E51851D48403A756134E7D0CF845406ABFBA9";

        var data = new
        {
            quantity = 65000,
            period = 1,
            receiver = "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            callback_url = "https://domain.name/callback",
            outter_id = "your order id"
        };

        var jsonData = JsonSerializer.Serialize(data);

        var keyBytes = Encoding.UTF8.GetBytes(API_KEY);
        var messageBytes = Encoding.UTF8.GetBytes(jsonData);

        using var hmac = new HMACSHA256(keyBytes);
        var hashBytes = hmac.ComputeHash(messageBytes);
        var signature = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();

        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("X-API-ID", API_ID.ToString());
        client.DefaultRequestHeaders.Add("SIGNATURE", signature);

        var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
        var response = await client.PostAsync("https://energy.store/api/createOrder", content);

        var responseContent = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseContent);
    }
}
package main

import (
    "bytes"
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    apiID := 1
    apiKey := "AA85A2111B4E76R3E181160EB23E51851D48403A756134E7D0CF845406ABFBA9"

    data := map[string]interface{}{
        "quantity":     65000,
        "period":       1,
        "receiver":     "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "callback_url": "https://domain.name/callback",
        "outter_id":    "your order id",
    }

    jsonData, err := json.Marshal(data)
    if err != nil {
        panic(err)
    }

    h := hmac.New(sha256.New, []byte(apiKey))
    h.Write(jsonData)
    signature := hex.EncodeToString(h.Sum(nil))

    req, err := http.NewRequest("POST", "https://energy.store/api/createOrder", bytes.NewBuffer(jsonData))
    if err != nil {
        panic(err)
    }

    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("X-API-ID", fmt.Sprintf("%d", apiID))
    req.Header.Set("SIGNATURE", signature)

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import com.fasterxml.jackson.databind.ObjectMapper;

public class EnergyStoreApiExample {
    public static void main(String[] args) throws Exception {
        int API_ID = 1;
        String API_KEY = "AA85A2111B4E76R3E181160EB23E51851D48403A756134E7D0CF845406ABFBA9";

        Map data = new HashMap<>();
        data.put("quantity", 65000);
        data.put("period", 1);
        data.put("receiver", "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
        data.put("callback_url", "https://domain.name/callback");
        data.put("outter_id", "your order id");

        ObjectMapper mapper = new ObjectMapper();
        String jsonData = mapper.writeValueAsString(data);

        String signature = calculateHMAC(API_KEY, jsonData);

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://energy.store/api/createOrder"))
                .header("Content-Type", "application/json")
                .header("X-API-ID", String.valueOf(API_ID))
                .header("SIGNATURE", signature)
                .POST(HttpRequest.BodyPublishers.ofString(jsonData))
                .build();

        HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }

    private static String calculateHMAC(String key, String data) throws NoSuchAlgorithmException, InvalidKeyException {
        Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
        SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
        sha256_HMAC.init(secret_key);

        byte[] hash = sha256_HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8));
        StringBuilder hexString = new StringBuilder();
        for (byte b : hash) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }
        return hexString.toString();
    }
}
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import java.security.MessageDigest
import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec

fun main() {
    val API_ID = 1
    val API_KEY = "AA85A2111B4E76R3E181160EB23E51851D48403A756134E7D0CF845406ABFBA9"

    val data = JSONObject().apply {
        put("quantity", 65000)
        put("period", 1)
        put("receiver", "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
        put("callback_url", "https://domain.name/callback")
        put("outter_id", "your order id")
    }

    val jsonData = data.toString()

    val signature = calculateHMAC(API_KEY, jsonData)

    val client = OkHttpClient()

    val mediaType = "application/json; charset=utf-8".toMediaType()
    val body = jsonData.toRequestBody(mediaType)

    val request = Request.Builder()
        .url("https://energy.store/api/createOrder")
        .addHeader("Content-Type", "application/json")
        .addHeader("X-API-ID", API_ID.toString())
        .addHeader("SIGNATURE", signature)
        .post(body)
        .build()

    client.newCall(request).execute().use { response ->
        println(response.body?.string())
    }
}

fun calculateHMAC(key: String, data: String): String {
    val secretKeySpec = SecretKeySpec(key.toByteArray(), "HmacSHA256")
    val mac = Mac.getInstance("HmacSHA256")
    mac.init(secretKeySpec)

    val hmacBytes = mac.doFinal(data.toByteArray())
    return hmacBytes.joinToString("") { "%02x".format(it) }
}
require 'net/http'
require 'uri'
require 'json'
require 'openssl'

API_ID = 1
API_KEY = "AA85A2111B4E76R3E181160EB23E51851D48403A756134E7D0CF845406ABFBA9"

data = {
  quantity: 65000,
  period: 1,
  receiver: 'TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  callback_url: 'https://domain.name/callback',
  outter_id: 'your order id'
}

sorted_data = data.sort.to_h
json_data = sorted_data.to_json

digest = OpenSSL::Digest.new('sha256')
signature = OpenSSL::HMAC.hexdigest(digest, API_KEY, json_data)

uri = URI.parse('https://energy.store/api/createOrder')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'

request = Net::HTTP::Post.new(uri.path)
request['Content-Type'] = 'application/json'
request['X-API-ID'] = API_ID.to_s
request['SIGNATURE'] = signature
request.body = json_data

response = http.request(request)
puts response.body
use hmac::{Hmac, Mac};
use reqwest::header::{HeaderMap, HeaderValue, CONTENT_TYPE};
use serde::{Deserialize, Serialize};
use sha2::Sha256;
use std::error::Error;

type HmacSha256 = Hmac;

#[derive(Serialize, Deserialize)]
struct OrderRequest {
    quantity: u32,
    period: u32,
    receiver: String,
    callback_url: String,
    outter_id: String,
}

#[tokio::main]
async fn main() -> Result<(), Box> {
    let api_id = 1;
    let api_key = "AA85A2111B4E76R3E181160EB23E51851D48403A756134E7D0CF845406ABFBA9";

    let order_data = OrderRequest {
        quantity: 65000,
        period: 1,
        receiver: "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX".to_string(),
        callback_url: "https://domain.name/callback".to_string(),
        outter_id: "your order id".to_string(),
    };

    let json_data = serde_json::to_string(&order_data)?;

    let mut mac = HmacSha256::new_from_slice(api_key.as_bytes())?;
    mac.update(json_data.as_bytes());
    let result = mac.finalize();
    let signature_bytes = result.into_bytes();
    let signature = hex::encode(signature_bytes);

    let client = reqwest::Client::new();

    let mut headers = HeaderMap::new();
    headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json"));
    headers.insert("X-API-ID", HeaderValue::from_str(&api_id.to_string())?);
    headers.insert("SIGNATURE", HeaderValue::from_str(&signature)?);

    let response = client
        .post("https://energy.store/api/createOrder")
        .headers(headers)
        .body(json_data)
        .send()
        .await?;

    let response_text = response.text().await?;
    println!("{}", response_text);

    Ok(())
}

Check Order

To retrieve order information, you need to send a POST request with the required parameters.

URL

POST https://energy.store/api/checkOrder

Parameters

Name Type Required Description
orderID STRING Yes Unique identifier of your order

Response Example (Completed)

{
  "status": "completed",
  "orderID": "a60efbea-1161-46d5-bcd1-c54fc80908f3",
  "quantity": 65000,
  "period": 1,
  "receiver": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "cost": 3.25,
  "transaction": "fc1a65f3227f1c4c91e1e1dcc5c13c234a25f1d26df73c712b4ed7e153d0776a",
  "outter_id": "your order id"
}

The response means that the order is complete and the energy has been added to your address.

Response Example (Canceled)

{
  "status": "canceled",
  "orderID": "a60efbea-1161-46d5-bcd1-c54fc80908f3",
  "quantity": 65000,
  "period": 1,
  "receiver": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "cost": null,
  "transaction": null,
  "outter_id": "your order id"
}

The response means that the order could not be completed, and the energy was not added.

  • status — order status.
  • orderID — identifier of your order.
  • quantity — amount of rented energy.
  • period — rental period in hours.
  • receiver — wallet address to receive energy.
  • cost — energy rental fee in TRX.
  • transaction — transaction hash in the TRON network.
  • outter_id — will be displayed if provided by you; otherwise, it will be null.

Code Examples

<?php

$API_ID = 1;
$API_KEY = "YOUR_API_KEY_HERE";

$data = [
    'orderID' => 'Unique identifier of your order',
];

ksort($data);

$jsondata = json_encode($data, JSON_UNESCAPED_SLASHES);
$signature = hash_hmac('sha256', $jsondata, $API_KEY);

$ch = curl_init("https://energy.store/api/checkOrder");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsondata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "X-API-ID: $API_ID",
    "SIGNATURE: $signature"
]);

$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
import hashlib
import hmac
import json
import requests

API_ID = 1
API_KEY = "YOUR_API_KEY_HERE"

data = {
    'orderID': 'Unique identifier of your order'
}

sorted_data = dict(sorted(data.items()))
json_data = json.dumps(sorted_data, ensure_ascii=False, separators=(',', ':'))

signature = hmac.new(API_KEY.encode(), json_data.encode(), hashlib.sha256).hexdigest()

headers = {
    "Content-Type": "application/json",
    "X-API-ID": str(API_ID),
    "SIGNATURE": signature
}

url = "https://energy.store/api/checkOrder"
response = requests.post(url, headers=headers, data=json_data)

print(response.text)
const axios = require('axios');
const crypto = require('crypto');

const API_ID = 1;
const API_KEY = "YOUR_API_KEY_HERE";

let data = {
    orderID: 'Unique identifier of your order'
};

let sortedKeys = Object.keys(data).sort();
let sortedData = {};
sortedKeys.forEach(key => {
  sortedData[key] = data[key];
});

const jsonData = JSON.stringify(sortedData);

const signature = crypto
  .createHmac('sha256', API_KEY)
  .update(jsonData)
  .digest('hex');

const headers = {
  "Content-Type": "application/json",
  "X-API-ID": API_ID.toString(),
  "SIGNATURE": signature
};

axios.post("https://energy.store/api/checkOrder", jsonData, { headers })
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error.response ? error.response.data : error.message);
  });
using System;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class CheckOrderExample
{
    static async Task Main()
    {
        int API_ID = 1;
        string API_KEY = "YOUR_API_KEY_HERE";

        var data = new {
            orderID = "Unique identifier of your order"
        };

        var jsonData = JsonSerializer.Serialize(data);

        var keyBytes = Encoding.UTF8.GetBytes(API_KEY);
        var messageBytes = Encoding.UTF8.GetBytes(jsonData);

        using var hmac = new HMACSHA256(keyBytes);
        var hashBytes = hmac.ComputeHash(messageBytes);
        var signature = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();

        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("X-API-ID", API_ID.ToString());
        client.DefaultRequestHeaders.Add("SIGNATURE", signature);

        var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
        var response = await client.PostAsync("https://energy.store/api/checkOrder", content);

        var responseContent = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseContent);
    }
}
package main

import (
    "bytes"
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    apiID := 1
    apiKey := "YOUR_API_KEY_HERE"

    data := map[string]interface{}{
        "orderID": "Unique identifier of your order",
    }

    jsonData, err := json.Marshal(data)
    if err != nil {
        panic(err)
    }

    h := hmac.New(sha256.New, []byte(apiKey))
    h.Write(jsonData)
    signature := hex.EncodeToString(h.Sum(nil))

    req, err := http.NewRequest("POST", "https://energy.store/api/checkOrder", bytes.NewBuffer(jsonData))
    if err != nil {
        panic(err)
    }

    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("X-API-ID", fmt.Sprintf("%d", apiID))
    req.Header.Set("SIGNATURE", signature)

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import com.fasterxml.jackson.databind.ObjectMapper;

public class CheckOrderExample {
    public static void main(String[] args) throws Exception {
        int API_ID = 1;
        String API_KEY = "YOUR_API_KEY_HERE";

        Map data = new HashMap<>();
        data.put("orderID", "Unique identifier of your order");

        ObjectMapper mapper = new ObjectMapper();
        String jsonData = mapper.writeValueAsString(data);

        String signature = calculateHMAC(API_KEY, jsonData);

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://energy.store/api/checkOrder"))
                .header("Content-Type", "application/json")
                .header("X-API-ID", String.valueOf(API_ID))
                .header("SIGNATURE", signature)
                .POST(HttpRequest.BodyPublishers.ofString(jsonData))
                .build();

        HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }

    private static String calculateHMAC(String key, String data) throws NoSuchAlgorithmException, InvalidKeyException {
        Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
        SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
        sha256_HMAC.init(secret_key);

        byte[] hash = sha256_HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8));
        StringBuilder hexString = new StringBuilder();
        for (byte b : hash) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }
        return hexString.toString();
    }
}
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import java.security.InvalidKeyException
import java.security.NoSuchAlgorithmException
import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec

fun main() {
    val API_ID = 1
    val API_KEY = "YOUR_API_KEY_HERE"

    val data = JSONObject().apply {
        put("orderID", "Unique identifier of your order")
    }

    val jsonData = data.toString()
    val signature = calculateHMAC(API_KEY, jsonData)

    val client = OkHttpClient()
    val mediaType = "application/json; charset=utf-8".toMediaType()
    val body = jsonData.toRequestBody(mediaType)

    val request = Request.Builder()
        .url("https://energy.store/api/checkOrder")
        .addHeader("Content-Type", "application/json")
        .addHeader("X-API-ID", API_ID.toString())
        .addHeader("SIGNATURE", signature)
        .post(body)
        .build()

    client.newCall(request).execute().use { response ->
        println(response.body?.string())
    }
}

@Throws(NoSuchAlgorithmException::class, InvalidKeyException::class)
fun calculateHMAC(key: String, data: String): String {
    val secretKeySpec = SecretKeySpec(key.toByteArray(), "HmacSHA256")
    val mac = Mac.getInstance("HmacSHA256")
    mac.init(secretKeySpec)
    val hmacBytes = mac.doFinal(data.toByteArray())
    return hmacBytes.joinToString("") { "%02x".format(it) }
}
require 'net/http'
require 'uri'
require 'json'
require 'openssl'

API_ID = 1
API_KEY = "YOUR_API_KEY_HERE"

data = {
  orderID: 'Unique identifier of your order'
}

sorted_data = data.sort.to_h
json_data = sorted_data.to_json

digest = OpenSSL::Digest.new('sha256')
signature = OpenSSL::HMAC.hexdigest(digest, API_KEY, json_data)

uri = URI.parse('https://energy.store/api/checkOrder')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri.path)
request['Content-Type'] = 'application/json'
request['X-API-ID'] = API_ID.to_s
request['SIGNATURE'] = signature
request.body = json_data

response = http.request(request)
puts response.body
use hmac::{Hmac, Mac, NewMac};
use sha2::Sha256;
use serde::{Deserialize, Serialize};
use std::error::Error;
use std::collections::BTreeMap;
use reqwest::header::{HeaderMap, HeaderValue, CONTENT_TYPE};

type HmacSha256 = Hmac;

#[derive(Serialize, Deserialize)]
struct CheckOrderRequest {
    orderID: String,
}

#[tokio::main]
async fn main() -> Result<(), Box> {
    let api_id = 1;
    let api_key = "YOUR_API_KEY_HERE";

    let req_data = CheckOrderRequest {
        orderID: "Unique identifier of your order".to_string(),
    };

    let json_data = serde_json::to_string(&req_data)?;

    let mut mac = HmacSha256::new_from_slice(api_key.as_bytes())?;
    mac.update(json_data.as_bytes());
    let result = mac.finalize();
    let signature_bytes = result.into_bytes();
    let signature = hex::encode(signature_bytes);

    let client = reqwest::Client::new();

    let mut headers = HeaderMap::new();
    headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json"));
    headers.insert("X-API-ID", HeaderValue::from_str(&api_id.to_string())?);
    headers.insert("SIGNATURE", HeaderValue::from_str(&signature)?);

    let response = client
        .post("https://energy.store/api/checkOrder")
        .headers(headers)
        .body(json_data)
        .send()
        .await?;

    println!("{}", response.text().await?);

    Ok(())
}

Order Notifications (Callback)

After processing your order, we will send a notification to the URL address if you provided it when creating the order.

Callback Data

NAME TYPE DESCRIPTION
status STRING Order status. (completed or canceled)
orderID STRING Identifier of your order.
quantity INT Amount of rented energy.
period INT Rental period in hours.
receiver STRING Wallet address to receive energy.
cost FLOAT Energy rental fee in TRX.
transaction STRING Transaction hash in the TRON network.
outter_id STRING Will be displayed if provided by you; otherwise, it will be null.

Callback Handler Examples

<?php

$API_KEY = 'YOUR_API_KEY_HERE';

$postData = file_get_contents('php://input');
$headers = getallheaders();
$jsonData = json_decode($postData, true);

$receivedSignature = $headers['SIGNATURE'] ?? $headers['signature'] ?? '';

ksort($jsonData);

$calculatedSignature = hash_hmac('sha256', json_encode($jsonData, JSON_UNESCAPED_SLASHES), $API_KEY);

function logJsonData($data) {
    $logFile = 'callback_log.txt';
    file_put_contents($logFile, json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT) . PHP_EOL, FILE_APPEND);
}

if (hash_equals($calculatedSignature, $receivedSignature)) {
    logJsonData($jsonData);
    echo json_encode(['status' => 'success', 'message' => 'Signature is valid, data saved to log.']);
} else {
    echo json_encode(['status' => 'error', 'message' => 'Invalid signature.']);
}
import json
import hmac
import hashlib
from flask import Flask, request, jsonify

app = Flask(__name__)
API_KEY = 'YOUR_API_KEY_HERE'

def log_json_data(data):
    with open('callback_log.txt', 'a', encoding='utf-8') as f:
        f.write(json.dumps(data, ensure_ascii=False, indent=4) + '\\n')

@app.route('/callback', methods=['POST'])
def callback():
    json_data = request.get_json()
    if not json_data:
        return jsonify({'status': 'error', 'message': 'No JSON data received'}), 400

    received_signature = request.headers.get('SIGNATURE', '')

    sorted_data = dict(sorted(json_data.items()))
    recalculated_signature = hmac.new(
        API_KEY.encode('utf-8'),
        json.dumps(sorted_data, ensure_ascii=False, separators=(',', ':')).encode('utf-8'),
        hashlib.sha256
    ).hexdigest()

    if hmac.compare_digest(received_signature, recalculated_signature):
        log_json_data(json_data)
        return jsonify({'status': 'success', 'message': 'Signature is valid, data logged.'})
    else:
        return jsonify({'status': 'error', 'message': 'Invalid signature.'}), 403

if __name__ == '__main__':
    app.run(port=5000, debug=True)
const express = require('express');
const crypto = require('crypto');
const fs = require('fs');

const app = express();
app.use(express.json());

const API_KEY = 'YOUR_API_KEY_HERE';

function logJsonData(data) {
    fs.appendFileSync('callback_log.txt', JSON.stringify(data, null, 4) + '\\n');
}

app.post('/callback', (req, res) => {
    const receivedSignature = req.headers['signature'] || '';
    const jsonData = req.body;

    let sortedKeys = Object.keys(jsonData).sort();
    let sortedData = {};
    sortedKeys.forEach(key => {
      sortedData[key] = jsonData[key];
    });

    const recalculatedSignature = crypto
      .createHmac('sha256', API_KEY)
      .update(JSON.stringify(sortedData))
      .digest('hex');

    if (crypto.timingSafeEqual(Buffer.from(receivedSignature), Buffer.from(recalculatedSignature))) {
        logJsonData(jsonData);
        return res.json({ status: 'success', message: 'Signature is valid, data logged.' });
    } else {
        return res.status(403).json({ status: 'error', message: 'Invalid signature.' });
    }
});

app.listen(3000, () => {
    console.log('Callback server listening on port 3000');
});
using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;

class Program
{
    static readonly string API_KEY = "YOUR_API_KEY_HERE";

    static void Main(string[] args)
    {
        HttpListener listener = new HttpListener();
        listener.Prefixes.Add("http://*:8080/callback/");
        listener.Start();
        Console.WriteLine("Server started. Listening on port 8080...");

        while (true)
        {
            var context = listener.GetContext();
            var request = context.Request;
            var response = context.Response;

            if (request.HttpMethod == "POST")
            {
                using var reader = new StreamReader(request.InputStream, request.ContentEncoding);
                string body = reader.ReadToEnd();

                string receivedSignature = request.Headers["SIGNATURE"] ?? "";

                var jsonData = JsonSerializer.Deserialize>(body);

                var sorted = jsonData.OrderBy(k => k.Key).ToDictionary(k => k.Key, v => v.Value);
                string sortedJson = JsonSerializer.Serialize(sorted);

                string recalculatedSignature = CalculateHMAC(API_KEY, sortedJson);

                if (recalculatedSignature == receivedSignature)
                {
                    File.AppendAllText("callback_log.txt", JsonSerializer.Serialize(jsonData, new JsonSerializerOptions { WriteIndented = true }) + Environment.NewLine);
                    byte[] responseBytes = Encoding.UTF8.GetBytes("{\"status\":\"success\",\"message\":\"Signature is valid\"}");
                    response.StatusCode = 200;
                    response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
                }
                else
                {
                    byte[] responseBytes = Encoding.UTF8.GetBytes("{\"status\":\"error\",\"message\":\"Invalid signature\"}");
                    response.StatusCode = 403;
                    response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
                }

                response.Close();
            }
            else
            {
                response.StatusCode = 405;
                response.Close();
            }
        }
    }

    static string CalculateHMAC(string key, string data)
    {
        using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
        byte[] hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(data));
        StringBuilder sb = new StringBuilder();
        foreach (var b in hash)
            sb.Append(b.ToString("x2"));
        return sb.ToString();
    }
}
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "sort"
)

var API_KEY = "YOUR_API_KEY_HERE"

func main() {
    http.HandleFunc("/callback", callbackHandler)
    fmt.Println("Callback server started on port 8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func callbackHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method != http.MethodPost {
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
        return
    }

    body, err := ioutil.ReadAll(r.Body)
    if err != nil {
        http.Error(w, "Failed to read body", http.StatusBadRequest)
        return
    }
    defer r.Body.Close()

    receivedSignature := r.Header.Get("SIGNATURE")

    var jsonData map[string]interface{}
    if err := json.Unmarshal(body, &jsonData); err != nil {
        http.Error(w, "Invalid JSON", http.StatusBadRequest)
        return
    }

    keys := make([]string, 0, len(jsonData))
    for k := range jsonData {
        keys = append(keys, k)
    }
    sort.Strings(keys)
    sortedData := make(map[string]interface{})
    for _, k := range keys {
        sortedData[k] = jsonData[k]
    }
    sortedBytes, _ := json.Marshal(sortedData)

    mac := hmac.New(sha256.New, []byte(API_KEY))
    mac.Write(sortedBytes)
    recalculatedSignature := hex.EncodeToString(mac.Sum(nil))

    if recalculatedSignature == receivedSignature {
        logData, _ := json.MarshalIndent(jsonData, "", "  ")
        ioutil.WriteFile("callback_log.txt", []byte(fmt.Sprintf("%s\n", logData)), 0644)

        w.WriteHeader(http.StatusOK)
        w.Write([]byte(`{"status":"success","message":"Signature is valid"}`))
    } else {
        w.WriteHeader(http.StatusForbidden)
        w.Write([]byte(`{"status":"error","message":"Invalid signature"}`))
    }
}
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import com.fasterxml.jackson.databind.ObjectMapper;

public class CallbackJava {

    private static final String API_KEY = "YOUR_API_KEY_HERE";

    public static void main(String[] args) throws IOException {
        HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
        server.createContext("/callback", new CallbackHandler());
        server.start();
        System.out.println("Java callback server started on port 8080");
    }

    static class CallbackHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange exchange) throws IOException {
            if (!exchange.getRequestMethod().equalsIgnoreCase("POST")) {
                exchange.sendResponseHeaders(405, -1);
                return;
            }

            InputStream requestBody = exchange.getRequestBody();
            String body = new String(requestBody.readAllBytes(), StandardCharsets.UTF_8);

            String receivedSignature = exchange.getRequestHeaders().getFirst("SIGNATURE");
            if (receivedSignature == null) {
                receivedSignature = "";
            }

            ObjectMapper mapper = new ObjectMapper();
            Map jsonData;
            try {
                jsonData = mapper.readValue(body, Map.class);
            } catch (Exception e) {
                exchange.sendResponseHeaders(400, -1);
                return;
            }

            Map sortedMap = new TreeMap<>(jsonData);
            String sortedJson = mapper.writeValueAsString(sortedMap);

            String recalculatedSignature;
            try {
                recalculatedSignature = calculateHmac(API_KEY, sortedJson);
            } catch (Exception e) {
                exchange.sendResponseHeaders(500, -1);
                return;
            }

            if (recalculatedSignature.equals(receivedSignature)) {
                try (FileWriter fw = new FileWriter("callback_log.txt", true)) {
                    fw.write(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonData) + "\n");
                }
                String resp = "{\"status\":\"success\",\"message\":\"Signature is valid\"}";
                exchange.sendResponseHeaders(200, resp.length());
                exchange.getResponseBody().write(resp.getBytes(StandardCharsets.UTF_8));
            } else {
                String resp = "{\"status\":\"error\",\"message\":\"Invalid signature\"}";
                exchange.sendResponseHeaders(403, resp.length());
                exchange.getResponseBody().write(resp.getBytes(StandardCharsets.UTF_8));
            }

            exchange.close();
        }
    }

    static String calculateHmac(String key, String data) throws NoSuchAlgorithmException, InvalidKeyException {
        Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
        sha256_HMAC.init(secretKeySpec);
        byte[] hash = sha256_HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8));

        StringBuilder hexString = new StringBuilder();
        for (byte b : hash) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }
        return hexString.toString();
    }
}
import com.sun.net.httpserver.HttpExchange
import com.sun.net.httpserver.HttpHandler
import com.sun.net.httpserver.HttpServer
import java.io.*
import java.net.InetSocketAddress
import java.nio.charset.StandardCharsets
import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec
import com.fasterxml.jackson.databind.ObjectMapper
import java.security.InvalidKeyException
import java.security.NoSuchAlgorithmException
import java.util.*

val API_KEY = "YOUR_API_KEY_HERE"

fun main() {
    val server = HttpServer.create(InetSocketAddress(8080), 0)
    server.createContext("/callback", CallbackHandler())
    server.start()
    println("Kotlin callback server started on port 8080")
}

class CallbackHandler : HttpHandler {
    override fun handle(exchange: HttpExchange) {
        if (exchange.requestMethod != "POST") {
            exchange.sendResponseHeaders(405, -1)
            return
        }

        val body = exchange.requestBody.readBytes().toString(Charsets.UTF_8)
        var receivedSignature = exchange.requestHeaders.getFirst("SIGNATURE") ?: ""

        val mapper = ObjectMapper()
        val jsonData: Map = try {
            mapper.readValue(body, Map::class.java) as Map
        } catch (e: Exception) {
            exchange.sendResponseHeaders(400, -1)
            exchange.close()
            return
        }

        val sortedMap = TreeMap(jsonData)
        val sortedJson = mapper.writeValueAsString(sortedMap)

        val recalculatedSignature = calculateHmac(API_KEY, sortedJson)
        if (recalculatedSignature == receivedSignature) {
            File("callback_log.txt").appendText(
                mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonData) + "\n"
            )
            val resp = """{"status":"success","message":"Signature is valid"}"""
            exchange.sendResponseHeaders(200, resp.length.toLong())
            exchange.responseBody.write(resp.toByteArray(StandardCharsets.UTF_8))
        } else {
            val resp = """{"status":"error","message":"Invalid signature"}"""
            exchange.sendResponseHeaders(403, resp.length.toLong())
            exchange.responseBody.write(resp.toByteArray(StandardCharsets.UTF_8))
        }
        exchange.close()
    }
}

@Throws(NoSuchAlgorithmException::class, InvalidKeyException::class)
fun calculateHmac(key: String, data: String): String {
    val mac = Mac.getInstance("HmacSHA256")
    mac.init(SecretKeySpec(key.toByteArray(), "HmacSHA256"))
    val hash = mac.doFinal(data.toByteArray())
    return hash.joinToString("") { "%02x".format(it) }
}
require 'webrick'
require 'json'
require 'openssl'

API_KEY = 'YOUR_API_KEY_HERE'

class CallbackServlet < WEBrick::HTTPServlet::AbstractServlet
  def do_POST(req, res)
    received_signature = req.header['signature']&.first || ''

    body = req.body
    begin
      data = JSON.parse(body)
    rescue
      res.status = 400
      res.body = '{"status":"error","message":"Invalid JSON"}'
      return
    end

    sorted_data = data.sort.to_h
    sorted_json = JSON.dump(sorted_data)

    digest = OpenSSL::Digest::SHA256.new
    recalculated_signature = OpenSSL::HMAC.hexdigest(digest, API_KEY, sorted_json)

    if recalculated_signature == received_signature
      File.open('callback_log.txt', 'a') do |f|
        f.puts JSON.pretty_generate(data)
      end
      res.status = 200
      res.body = '{"status":"success","message":"Signature is valid"}'
    else
      res.status = 403
      res.body = '{"status":"error","message":"Invalid signature"}'
    end
  end
end

server = WEBrick::HTTPServer.new(:Port => 8080)
server.mount '/callback', CallbackServlet
trap('INT') { server.shutdown }
server.start
use std::collections::BTreeMap;
use std::io::Read;
use std::net::TcpListener;
use std::sync::Arc;
use std::{fs::OpenOptions, io::Write};

use hmac::{Hmac, Mac, NewMac};
use rouille::{Request, Response};
use serde_json::Value;
use sha2::Sha256;

static API_KEY: &str = "YOUR_API_KEY_HERE";

type HmacSha256 = Hmac;

fn main() {
    let address = "0.0.0.0:8080";
    println!("Listening on {}", address);

    rouille::start_server(address, move |request| {
        rouille::log(request, std::io::stdout(), || {
            if request.url() == "/callback" && request.method() == "POST" {
                handle_callback(request)
            } else {
                Response::empty_404()
            }
        })
    });
}

fn handle_callback(request: &Request) -> Response {
    let body = request.data().expect("Failed to read body");
    let mut buf = Vec::new();
    let mut reader = body.take(10_000_000);
    reader.read_to_end(&mut buf).unwrap();

    let received_signature = request.header("SIGNATURE").unwrap_or("");

    let json: Value = match serde_json::from_slice(&buf) {
        Ok(val) => val,
        Err(_) => return Response::text("Invalid JSON").with_status_code(400),
    };

    let map = match json.as_object() {
        Some(m) => m,
        None => return Response::text("JSON is not an object").with_status_code(400),
    };

    let mut sorted = BTreeMap::new();
    for (k, v) in map.iter() {
        sorted.insert(k, v);
    }

    let sorted_json = serde_json::to_string(&sorted).unwrap();

    let mut mac = HmacSha256::new_from_slice(API_KEY.as_bytes()).unwrap();
    mac.update(sorted_json.as_bytes());
    let signature_bytes = mac.finalize().into_bytes();
    let recalculated_signature = hex::encode(signature_bytes);

    if recalculated_signature == received_signature {
        let mut file = OpenOptions::new()
            .create(true)
            .append(true)
            .open("callback_log.txt")
            .unwrap();
        let _ = writeln!(file, "{}", serde_json::to_string_pretty(&json).unwrap());

        Response::text(r#"{"status":"success","message":"Signature is valid"}"#)
    } else {
        Response::text(r#"{"status":"error","message":"Invalid signature"}"#).with_status_code(403)
    }
}

Check Address

To obtain information on whether the recipient's address has USDT funds, you need to send a POST request with the required parameters.

URL

POST https://energy.store/api/checkAddress

Parameters

Name Type Required Description
address STRING Yes Wallet address TRON

Response Example (Success)

{
  "status": "completed",
  "usdt": true
}

The usdt parameter can be either true (indicating that the recipient has funds in their balance) or false (indicating that there are no funds).

Response Example (Error)

{
  "status": "error",
  "message": "Error message text"
}

Code Examples

<?php

$API_ID = 1;
$API_KEY = "YOUR_API_KEY_HERE";

$data = [
    'address' => 'TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
];

ksort($data);

$jsondata = json_encode($data, JSON_UNESCAPED_SLASHES);
$signature = hash_hmac('sha256', $jsondata, $API_KEY);

$ch = curl_init("https://energy.store/api/checkAddress");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsondata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "X-API-ID: $API_ID",
    "SIGNATURE: $signature"
]);

$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
import hashlib
import hmac
import json
import requests

API_ID = 1
API_KEY = "YOUR_API_KEY_HERE"

data = {
    'address': 'TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
}

sorted_data = dict(sorted(data.items()))
json_data = json.dumps(sorted_data, ensure_ascii=False, separators=(',', ':'))

signature = hmac.new(API_KEY.encode(), json_data.encode(), hashlib.sha256).hexdigest()

headers = {
    "Content-Type": "application/json",
    "X-API-ID": str(API_ID),
    "SIGNATURE": signature
}

url = "https://energy.store/api/checkAddress"
response = requests.post(url, headers=headers, data=json_data)

print(response.text)
const axios = require('axios');
const crypto = require('crypto');

const API_ID = 1;
const API_KEY = "YOUR_API_KEY_HERE";

let data = {
    address: 'TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
};

let sortedKeys = Object.keys(data).sort();
let sortedData = {};
sortedKeys.forEach(key => {
  sortedData[key] = data[key];
});

const jsonData = JSON.stringify(sortedData);

const signature = crypto
  .createHmac('sha256', API_KEY)
  .update(jsonData)
  .digest('hex');

const headers = {
  "Content-Type": "application/json",
  "X-API-ID": API_ID.toString(),
  "SIGNATURE": signature
};

axios.post("https://energy.store/api/checkAddress", jsonData, { headers })
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error.response ? error.response.data : error.message);
  });
using System;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class CheckAddressExample
{
    static async Task Main()
    {
        int API_ID = 1;
        string API_KEY = "YOUR_API_KEY_HERE";

        var data = new {
            address = "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        };

        var jsonData = JsonSerializer.Serialize(data);

        var keyBytes = Encoding.UTF8.GetBytes(API_KEY);
        var messageBytes = Encoding.UTF8.GetBytes(jsonData);

        using var hmac = new HMACSHA256(keyBytes);
        var hashBytes = hmac.ComputeHash(messageBytes);
        var signature = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();

        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("X-API-ID", API_ID.ToString());
        client.DefaultRequestHeaders.Add("SIGNATURE", signature);

        var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
        var response = await client.PostAsync("https://energy.store/api/checkAddress", content);

        var responseContent = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseContent);
    }
}
package main

import (
    "bytes"
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    apiID := 1
    apiKey := "YOUR_API_KEY_HERE"

    data := map[string]interface{}{
        "address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    }

    jsonData, err := json.Marshal(data)
    if err != nil {
        panic(err)
    }

    h := hmac.New(sha256.New, []byte(apiKey))
    h.Write(jsonData)
    signature := hex.EncodeToString(h.Sum(nil))

    req, err := http.NewRequest("POST", "https://energy.store/api/checkAddress", bytes.NewBuffer(jsonData))
    if err != nil {
        panic(err)
    }

    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("X-API-ID", fmt.Sprintf("%d", apiID))
    req.Header.Set("SIGNATURE", signature)

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import com.fasterxml.jackson.databind.ObjectMapper;

public class CheckAddressExample {
    public static void main(String[] args) throws Exception {
        int API_ID = 1;
        String API_KEY = "YOUR_API_KEY_HERE";

        Map data = new HashMap<>();
        data.put("address", "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

        ObjectMapper mapper = new ObjectMapper();
        String jsonData = mapper.writeValueAsString(data);

        String signature = calculateHMAC(API_KEY, jsonData);

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://energy.store/api/checkAddress"))
                .header("Content-Type", "application/json")
                .header("X-API-ID", String.valueOf(API_ID))
                .header("SIGNATURE", signature)
                .POST(HttpRequest.BodyPublishers.ofString(jsonData))
                .build();

        HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }

    private static String calculateHMAC(String key, String data) throws NoSuchAlgorithmException, InvalidKeyException {
        Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
        SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
        sha256_HMAC.init(secret_key);

        byte[] hash = sha256_HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8));
        StringBuilder hexString = new StringBuilder();
        for (byte b : hash) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }
        return hexString.toString();
    }
}
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import java.security.InvalidKeyException
import java.security.NoSuchAlgorithmException
import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec

fun main() {
    val API_ID = 1
    val API_KEY = "YOUR_API_KEY_HERE"

    val data = JSONObject().apply {
        put("address", "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
    }

    val jsonData = data.toString()
    val signature = calculateHmac(API_KEY, jsonData)

    val client = OkHttpClient()
    val mediaType = "application/json; charset=utf-8".toMediaType()
    val body = jsonData.toRequestBody(mediaType)

    val request = Request.Builder()
        .url("https://energy.store/api/checkAddress")
        .addHeader("Content-Type", "application/json")
        .addHeader("X-API-ID", API_ID.toString())
        .addHeader("SIGNATURE", signature)
        .post(body)
        .build()

    client.newCall(request).execute().use { response ->
        println(response.body?.string())
    }
}

@Throws(NoSuchAlgorithmException::class, InvalidKeyException::class)
fun calculateHmac(key: String, data: String): String {
    val mac = Mac.getInstance("HmacSHA256")
    mac.init(SecretKeySpec(key.toByteArray(), "HmacSHA256"))
    val hash = mac.doFinal(data.toByteArray())
    return hash.joinToString("") { "%02x".format(it) }
}
require 'net/http'
require 'uri'
require 'json'
require 'openssl'

API_ID = 1
API_KEY = "YOUR_API_KEY_HERE"

data = {
  address: 'TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
}

sorted_data = data.sort.to_h
json_data = sorted_data.to_json

digest = OpenSSL::Digest.new('sha256')
signature = OpenSSL::HMAC.hexdigest(digest, API_KEY, json_data)

uri = URI.parse('https://energy.store/api/checkAddress')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri.path)
request['Content-Type'] = 'application/json'
request['X-API-ID'] = API_ID.to_s
request['SIGNATURE'] = signature
request.body = json_data

response = http.request(request)
puts response.body
use hmac::{Hmac, Mac, NewMac};
use sha2::Sha256;
use reqwest::header::{HeaderMap, HeaderValue, CONTENT_TYPE};
use serde::{Deserialize, Serialize};
use std::error::Error;

type HmacSha256 = Hmac;

#[derive(Serialize, Deserialize)]
struct CheckAddressRequest {
    address: String,
}

#[tokio::main]
async fn main() -> Result<(), Box> {
    let api_id = 1;
    let api_key = "YOUR_API_KEY_HERE";

    let req_data = CheckAddressRequest {
        address: "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX".to_string(),
    };

    let json_data = serde_json::to_string(&req_data)?;

    let mut mac = HmacSha256::new_from_slice(api_key.as_bytes())?;
    mac.update(json_data.as_bytes());
    let result = mac.finalize();
    let signature_bytes = result.into_bytes();
    let signature = hex::encode(signature_bytes);

    let client = reqwest::Client::new();

    let mut headers = HeaderMap::new();
    headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json"));
    headers.insert("X-API-ID", HeaderValue::from_str(&api_id.to_string())?);
    headers.insert("SIGNATURE", HeaderValue::from_str(&signature)?);

    let response = client
        .post("https://energy.store/api/checkAddress")
        .headers(headers)
        .body(json_data)
        .send()
        .await?;

    let response_text = response.text().await?;
    println!("{}", response_text);

    Ok(())
}