Быстрый старт API · покупатель
Разместите первый ордер покупателя через API
Этот сценарий использует текущие публичные endpoints рынка и действующий контракт buyer order. Ключ создаётся в авторизованном браузере, одноразовый secret хранится вне исходного кода, затем проверяются live book и внутренний кредит платформы и отправляется один идемпотентный ордер.
Создайте в dashboard ключ с Read + Buy
Подключите TRON-кошелёк, подпишите вход, откройте управление API-ключами и создайте ключ с правами Read и Buy. Создание ключа требует браузерную session: API-ключ не может выпустить другой ключ или расширить собственные права.
Полный secret показывается ровно один раз. Сохраните его в менеджере секретов или временной переменной shell, но не в URL, логах, скриншотах, репозитории или клиентском bundle. Потерянный ключ отзовите и создайте заново.Получите публичную live-цену и один срез глубины
Эти GET endpoints не требуют credential. Цена выбирается по resource, а глубина — также по сроку аренды и минимальному лоту. Перед выбором price_sun сверяйтесь с asks из ответа.
curl --silent --show-error --fail-with-body \ 'https://tet.energy/v1/price?resource=energy' curl --silent --show-error --fail-with-body \ 'https://tet.energy/v1/market/depth?resource=energy&duration=86400&min_lot=65000'Проверьте доступный кредит платформы
С правом Read проверьте available_trx. Пример ордера резервирует 4,225 TRX внутреннего доступного баланса: 65 sun × 65 000 energy × один оплачиваемый день.
curl --silent --show-error --fail-with-body \ 'https://tet.energy/v1/balance' \ -H 'Authorization: Bearer <YOUR_API_KEY>'Внутренний баланс — не TRX-баланс подключённого кошелька. GET /v1/balance при готовности сервиса пополнений возвращает персональный deposit_address и точный deposit_minimum_trx. Пополняйте только при наличии обоих полей: отправьте на deposit_address не меньше указанного минимума в реальных TRX и дождитесь подтверждений перед расходованием. Никогда не отправляйте средства на кошелёк входа; вывод средств недоступен.Отправьте ордер с уникальным idempotency key
Замените все три placeholder. JSON содержит только пять обязательных полей OrderCreate. В примере указан дневной floor для energy — 65 sun; без ask по этой или меньшей цене ордер может остаться открытым, поэтому пример не является гарантией исполнения.
curl --silent --show-error --fail-with-body \ -X POST 'https://tet.energy/v1/orders' \ -H 'Authorization: Bearer <YOUR_API_KEY>' \ -H 'Idempotency-Key: <UNIQUE_REQUEST_ID>' \ -H 'Content-Type: application/json' \ --data-binary '{ "resource": "energy", "amount": 65000, "duration_sec": 86400, "price_sun": 65, "receiver_address": "<VALID_TRON_RECEIVER_ADDRESS>" }'Первое создание возвращает HTTP 201. Точный повтор с теми же Idempotency-Key и body возвращает существующий ордер с HTTP 200.
Обязательные поля запроса
- resource
- energy или bandwidth.
- amount
- Положительное целое количество единиц ресурса.
- duration_sec
- Один из доступных сроков в секундах; 86400 — один день.
- price_sun
- Ваш лимит в sun за единицу ресурса за оплачиваемый день, не ниже действующего floor.
- receiver_address
- Валидный base58 TRON-адрес, который получит делегированный ресурс. Он может отличаться от кошелька входа.
Правило повтора. Используйте тот же ключ только для точного повтора того же body после неопределённого ответа. Для нового логического ордера нужен новый ключ; прежний ключ с изменённым body вернёт conflict.
Ошибки текущего API-контракта
Все ошибки имеют единый envelope. Для обращения в поддержку сохраните request_id и response header X-Request-ID; secret в них не передаётся.
{
"error": {
"code": "<ERROR_CODE>",
"message": "<MESSAGE>",
"request_id": "<REQUEST_ID>"
}
} - 401 · unauthorized
- Bearer header отсутствует или credential не прошёл проверку. Неверный формат, неизвестный, изменённый или отозванный ключ намеренно выглядят одинаково. Никогда не передавайте api_key в query string.
- 403 · forbidden
- Ключ распознан, но нужного scope нет. Создайте новый Read + Buy ключ в авторизованном dashboard: ключ не может расширить свои права.
- 402 · insufficient_balance
- available_trx не покрывает escrow reserve. TRX подключённого кошелька не удовлетворяют проверке внутреннего ledger.
- 422 · invalid_request
- Запрос не прошёл validation. Если error.details присутствует, там указаны поля; service-level validation может вернуть только message. Проверьте доступный срок, floor цены, положительные целые значения и receiver address.
- 409 · conflict
- Один idempotency key использован с другим body ордера. Не меняйте повторяемый запрос; для нового ордера создайте новый ключ.
- 429 · rate_limited
- Остановите запросы, соблюдайте header Retry-After и повторяйте с backoff.
- 503 · unavailable
- Сервис или обязательный live network ratio временно недоступен. Повторите позже и не подставляйте выдуманные цену или ratio.