Skip to content
Translated page. The English version is the source of truth.

GET /apiv2/usdt/{sender}&

Розрахунок вартості переказу TRON USDT (публічний ендпоінт, API-ключ не потрібен).

Повертає детальний аналіз акаунтів відправника та одержувача, вимоги до ресурсів (Energy/Bandwidth) та рекомендований варіант витрат.

Низький ліміт запитів — призначено для періодичного використання або тестування

Цей ендпоінт є загальнодоступним, а його ліміт становить 1 зап/сек та 60 зап/хв. Якщо ваш застосунок працює за Cloudflare або іншим зворотним проксі, ліміт може фактично ділитися між усіма клієнтами, які звертаються до Netts через той самий edge-сервер, тому ви можете отримати 429 Too Many Requests раніше, ніж буде досягнуто 60 запитів/хвилину від одного користувача.

Для будь-яких завдань, крім поодиноких викликів, використовуйте автентифікований ендпоінт POST /apiv2/usdt/analyze — він має значно вищий ліміт на ключ (50 зап/сек).

URL ендпоінта

GET https://netts.io/apiv2/usdt/{sender}&{receiver}

Параметри URL

ПараметрТипОбов'язковийОпис
senderstringТакTRON-адреса відправника
receiverstringТакTRON-адреса одержувача

Адреси передаються у шляху запиту та розділяються амперсандом (&). Обидві мають бути дійсними TRON-адресами у форматі base58 (34 символи, починаються з T, правильна контрольна сума).

Приклади запитів

cURL

bash
curl "https://netts.io/apiv2/usdt/TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe&TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL"

Python

python
import requests

sender   = "TFLit1TFohBtT2f8UVCLFVPmZxawxqByYe"
receiver = "TTKR9aQdJWTgXLK9cmzaDitT5VXE497thL"

url = f"https://netts.io/apiv2/usdt/{sender}&{receiver}"
response = requests.get(url, timeout=15)

if response.status_code == 200:
    payload = response.json()
    data = payload["data"]
    print(f"Can transfer:        {data['can_transfer']}")
    print(f"Energy needed:       {data['requirements']['energy_needed']}")
    print(f"Bandwidth needed:    {data['requirements']['bandwidth_needed']}")
    print(f"Total cost (TRX):    {data['costs']['total_cost_trx']}")
    print(f"Recommended method:  {data['costs']['recommended_method']}")
elif response.status_code == 429:
    print("Rate-limited — retry after:", response.headers.get("Retry-After"), "s")
else:
    print("Error:", response.json())

Відповідь

Успіх (200 OK)

Оболонка верхнього рівня:

json
{
    "status": "success",
    "data": { /* TransferAnalysis — див. нижче */ },
    "current_utc_time": "2026-04-23 11:54:13",
    "processing_time_ms": 19.27
}

data (TransferAnalysis)

ПолеТипОпис
senderAddressInfoПовна інформація про акаунт відправника (баланс, стейкінг, делегування, активація).
receiverAddressInfoПовна інформація про акаунт одержувача.
requirementsRequirementsEnergy / Bandwidth, необхідні для переказу (фактичні + з безпечним запасом).
costsCostsРозбивка витрат на спалювання та оренду, а також рекомендований спосіб.
can_transferbooleantrue, якщо переказ може бути виконано за поточних ресурсів/цін.
issuesstring[]Проблеми, виявлені під час аналізу (наприклад, недостатньо Bandwidth).
recommendationsstring[]Зрозумілі користувачеві рекомендації для клієнта.
variation_idstring | nullІдентифікатор зіставленого сценарію (наприклад, "CUSTOM") із внутрішнього каталогу варіацій.
AddressInfo

Типові поля, які ви будете використовувати в інтеграціях: address, is_activated, trx_balance, usdt_balance, has_usdt, energy_balance, bandwidth_balance. Додаткові низькорівневі поля для розширеного використання: trx_balance_sun, energy_total, bandwidth_total, bandwidth_free, bandwidth_staked, energy_used, bandwidth_used, create_time, latest_operation_time, staked_for_energy, staked_for_bandwidth, delegated_for_energy, delegated_for_bandwidth, delegated_out_energy, delegated_out_bandwidth, votes.

Requirements
ПолеТипОпис
energy_neededintФактична кількість одиниць Energy, необхідна для переказу.
bandwidth_neededintФактична кількість необхідних одиниць Bandwidth.
energy_with_bufferintEnergy, округлена вгору до безпечного рівня оренди (наприклад, 131 000).
bandwidth_with_bufferintBandwidth з невеликим безпечним запасом.
receiver_has_usdtbooleanЧи є вже USDT у одержувача (впливає на Energy).
Costs
ПолеТипОпис
energy_burn_trxdecimalTRX, що спалюються, якщо Energy оплачується прямим спалюванням.
bandwidth_burn_trxdecimalTRX, що спалюються для покриття Bandwidth, якщо його немає безкоштовно.
total_burn_trxdecimalenergy_burn_trx + bandwidth_burn_trx.
total_burn_suninttotal_burn_trx, виражений у SUN (10⁻⁶ TRX).
energy_rental_trxdecimalВартість оренди необхідної Energy у Netts на вказаний нижче період.
energy_rental_sunintТе саме, що й вище, але в SUN.
rental_time_periodstringНаприклад, "1h", "5m" або "not_needed", коли оренда не є оптимальним варіантом.
rental_price_per_unitintВартість оренди за одиницю Energy в SUN для обраного періоду.
savings_trxdecimalНаскільки rent дешевше за burn (може бути від'ємним, якщо спалювання вигідніше).
savings_percentagefloatТе саме у відсотках.
recommended_methodstring"burn" або "rent" — вигідніший варіант для поточного запиту.
total_cost_trxdecimal | nullФактична вартість, якщо слідувати recommended_method.
sender_activation_costdecimal | nullДодаткова вартість, якщо акаунт відправника потребує активації, інакше null.

Приклад реальної відповіді (скорочено)

json
{
    "status": "success",
    "data": {
        "sender":   { "address": "TFLit1...", "is_activated": true,  "trx_balance": 191.943, "usdt_balance": 24410.499, "energy_balance": 195297, "bandwidth_balance": 148, "has_usdt": true,  "...": "..." },
        "receiver": { "address": "TTKR9a...", "is_activated": true,  "trx_balance":  18.656, "usdt_balance":     0.0,   "energy_balance":      0, "bandwidth_balance": 263, "has_usdt": false, "...": "..." },
        "requirements": {
            "energy_needed": 130285,
            "bandwidth_needed": 345,
            "energy_with_buffer": 131000,
            "bandwidth_with_buffer": 360,
            "receiver_has_usdt": false
        },
        "costs": {
            "energy_burn_trx": 0.0,
            "bandwidth_burn_trx": 0.345,
            "total_burn_trx": 0.345,
            "total_burn_sun": 345000,
            "energy_rental_trx": 0.0,
            "energy_rental_sun": 0,
            "rental_time_period": "not_needed",
            "rental_price_per_unit": 0,
            "savings_trx": 0.0,
            "savings_percentage": 0.0,
            "recommended_method": "burn",
            "total_cost_trx": 0.345,
            "sender_activation_cost": null
        },
        "can_transfer": true,
        "issues": [
            "Insufficient bandwidth: have 148, need 345. Network will burn 0.345 TRX for full amount"
        ],
        "recommendations": [
            "Insufficient bandwidth: have 148, need 345. Full amount of 0.345 TRX will be burned",
            "💰 Total cost: 0.345 TRX (burn for all resources)"
        ],
        "variation_id": "CUSTOM"
    },
    "current_utc_time": "2026-04-23 11:54:13",
    "processing_time_ms": 19.27
}

Помилки

HTTPТіло відповіді (приклад)Коли виникає
400{"code": -1, "msg": "Invalid sender address format: Txyz..."}Адреса не проходить валідацію TRON base58 / довжини / контрольної суми.
400{"code": -1, "msg": "Expected at least 2 parameters: sender&receiver"}URL не містить двох адрес, розділених символом &.
400{"code": -1, "msg": "Sender and receiver cannot be the same address"}Адреси відправника та одержувача збігаються.
429{"message": "API rate limit exceeded"}Перевищено ліміт запитів (див. попередження вгорі цієї сторінки).
500{"code": -1, "msg": "Internal server error"}Неочікувана помилка на стороні сервера.

Заголовки ліміту запитів

У кожній відповіді (включно з 429) повертаються такі заголовки:

ЗаголовокЗначення
X-RateLimit-Limit-SecondМаксимум запитів, дозволених на секунду (наразі 1).
X-RateLimit-Remaining-SecondСкільки ще можна надіслати протягом цієї секунди.
X-RateLimit-Limit-MinuteМаксимум запитів, дозволених на хвилину (наразі 60).
X-RateLimit-Remaining-MinuteСкільки ще можна надіслати протягом цієї хвилини.
Retry-AfterУ разі 429 — кількість секунд очікування перед повтором.

Заголовки налагодження

Кожна відповідь також містить ідентифікатори, корисні під час відкриття тікета в службу підтримки — будь ласка, додавайте їх без змін, щоб ми могли знайти запит у наших логах за лічені секунди:

ЗаголовокЗначення
X-Request-IDID запиту на стороні застосунку (створюється калькулятором).
X-Process-TimeЧас обробки застосунком у мілісекундах (upstream, не враховуючи Kong).
X-Kong-Request-IdID запиту на стороні Kong (присутній у логах доступу Kong).

Клієнтські таймаути та повторні спроби

Калькулятор виконує прямі ончейн-запити до вузлів TRON для кожного запиту, тому за високого навантаження або повільної роботи вузлів upstream один виклик може тривати кілька секунд. Короткі клієнтські таймаути призводитимуть до помилок навіть за успішних відповідей.

Рекомендовані налаштування:

  • Таймаут ≥ 15 секунд (безпечніше 30 с). Стандартний таймаут у 10 с, що використовується багатьма HTTP-клієнтами, занадто малий.
  • У разі HTTP 429 зважайте на заголовок Retry-After (у секундах). Додайте невеликий джитер (наприклад, 0–200 мс) перед повторною спробою, а потім використовуйте експоненційну затримку, якщо все ще потрапляєте під ліміт.
  • У разі HTTP 5xx або мережевих помилок повторюйте запит не більше 2–3 разів із експоненційною затримкою; не перевантажуйте ендпоінт частими запитами.
  • Кешуйте результат на стороні клієнта на 30–60 секунд для кожної пари (sender, receiver) — базові ціни ресурсів і стан мережі ончейн рідко змінюються настільки швидко, щоб виправдати частіший перерахунок.

Приклад відповіді 429

http
HTTP/1.1 429 Too Many Requests
Content-Type: application/json; charset=utf-8
RateLimit-Limit: 1
RateLimit-Remaining: 0
RateLimit-Reset: 1
Retry-After: 1
X-RateLimit-Limit-Second: 1
X-RateLimit-Remaining-Second: 0
X-RateLimit-Limit-Minute: 60
X-RateLimit-Remaining-Minute: 0

{"message":"API rate limit exceeded"}

Примітки

  • Анонімний доступ: жодних X-API-KEY, Authorization заголовків чи білих списків IP.
  • Відповідь завжди обгорнута в {status, data, current_utc_time, processing_time_ms} — інтеграції повинні зчитувати ціни з data.costs, а вимоги — з data.requirements.
  • Відповідь розраховується в реальному часі — вона відображає поточні ціни ресурсів TRON від Netts і поточний стан обох адрес у мережі, тому очікуйте невеликих відмінностей між послідовними викликами.
  • Якщо вашому застосунку потрібно викликати калькулятор частіше ніж кілька разів на хвилину (для кожної IP / кожного edge-сервера CF), перейдіть на POST /apiv2/usdt/analyze із вашим API-ключем.