Быстрый старт API · покупатель

Разместите первый ордер покупателя через API

Этот сценарий использует текущие публичные endpoints рынка и действующий контракт buyer order. Ключ создаётся в авторизованном браузере, одноразовый secret хранится вне исходного кода, затем проверяются live book и внутренний кредит платформы и отправляется один идемпотентный ордер.

  1. Создайте в dashboard ключ с Read + Buy

    Подключите TRON-кошелёк, подпишите вход, откройте управление API-ключами и создайте ключ с правами Read и Buy. Создание ключа требует браузерную session: API-ключ не может выпустить другой ключ или расширить собственные права.

    Полный secret показывается ровно один раз. Сохраните его в менеджере секретов или временной переменной shell, но не в URL, логах, скриншотах, репозитории или клиентском bundle. Потерянный ключ отзовите и создайте заново.
  2. Получите публичную 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'
  3. Проверьте доступный кредит платформы

    С правом 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 и дождитесь подтверждений перед расходованием. Никогда не отправляйте средства на кошелёк входа; вывод средств недоступен.
  4. Отправьте ордер с уникальным 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.