• Руководство пользователя
    • Заметки о безопасности
      Заметки о безопасности
    • Online/Desktop приложения
      • Управление аккаунтом
        • Создать аккаунт
          Создать аккаунт
        • Войти в аккаунт
          Войти в аккаунт
        • Создать Резервную Копию Seed-фразы
          Создать Резервную Копию Seed-фразы
        • Восстановить аккаунт
          Восстановить аккаунт
        • Узнать свой адрес
          Узнать свой адрес
        • Создать персональный алиас
          Создать персональный алиас
        • Импорт из Keeper Wallet
          Импорт из Keeper Wallet
        • Использовать устройства Legder Nano
          Использовать устройства Legder Nano
        Управление аккаунтом
      • Управление токенами
        • Ввод и вывод токенов
          • Транзакции
            Транзакции
          Ввод и вывод токенов
        • Создать токен
          Создать токен
        • Массовая отправка
          Массовая отправка
        • Перевыпустить токен
          Перевыпустить токен
        • Поменять перевыпускаемый на не перевыпускаемый
          Поменять перевыпускаемый на не перевыпускаемый
        • Сжечь токен
          Сжечь токен
        • Спонсорская транзакция
          Спонсорская транзакция
        • Спонсорская комиссия
          Спонсорская комиссия
        • Своп токенов
          Своп токенов
        Управление токенами
      • Инвестиционные инструменты
        • Передать в стейкинг
          • Как получить XTN (Quick Guide)
            Как получить XTN (Quick Guide)
          • Как получить USDT/USDC/BTC/ETH (Quick Guide)
            Как получить USDT/USDC/BTC/ETH (Quick Guide)
          Передать в стейкинг
        • Lambo инвестиции
          Lambo инвестиции
        • Алгоритмическая торговля
          Алгоритмическая торговля
        Инвестиционные инструменты
      • Пулы ликвидности
        • Как максимально увеличить пассивный доход от пулов ликвидности?
          Как максимально увеличить пассивный доход от пулов ликвидности?
        • Как внести/вывести токены в/из пул(а) ликвидности?
          Как внести/вывести токены в/из пул(а) ликвидности?
        • Как сдать в стейкинг/забрать из стейкинга LP-токены?
          Как сдать в стейкинг/забрать из стейкинга LP-токены?
        • Как забрать вознаграждение в WX-токене за стейкинг LP-токена?
          Как забрать вознаграждение в WX-токене за стейкинг LP-токена?
        • Как сдать WX-токен в стейкинг, чтобы увеличить доход за стейкинг LP-токена?
          Как сдать WX-токен в стейкинг, чтобы увеличить доход за стейкинг LP-токена?
        • Как забрать вознаграждения за WX стейкинг?
          Как забрать вознаграждения за WX стейкинг?
        • Протокол WX-токена
          Протокол WX-токена
        Пулы ликвидности
      • Голосование
        Голосование
      • Расширенные возможности
        • Script транзакции
          Script транзакции
        • JSON подтверждение
          JSON подтверждение
        Расширенные возможности
      • Торговля на бирже
        Торговля на бирже
      Online/Desktop приложения
    • Мобильные приложения
      • Приложение WX Network
        Приложение WX Network
      • Приложение Waves.Exchange
        • Управление аккаунтом
          • Создать аккаунт
            Создать аккаунт
          • Войти в аккаунт
            Войти в аккаунт
          • Восстановить аккаунт
            Восстановить аккаунт
          • Узнать свой адрес
            Узнать свой адрес
          • Создать персональный алиас
            Создать персональный алиас
          Управление аккаунтом
        • Управление токенами
          • Ввод и вывод токенов
            Ввод и вывод токенов
          • Сжечь токен
            Сжечь токен
          Управление токенами
        • Торговля на бирже
          Торговля на бирже
        Приложение Waves.Exchange
      • Приложение WX Invest
        Приложение WX Invest
      Мобильные приложения
    • Работа с MetaMask в сети Waves
      Работа с MetaMask в сети Waves
    • Реферальная программа WX
      Реферальная программа WX
    Руководство пользователя
  • API и библиотека
    • CCXT
      CCXT
    • Комиссии
      Комиссии
    • API платежей
      API платежей
    • API авторизации
      API авторизации
    • API шлюза
      • Внесение средств
        • [Deprecated] GET /v1/deposit/addresses/{currency}
          [Deprecated] GET /v1/deposit/addresses/{currency}
        • GET /v1/deposit/addresses/{currency}/{platform}
          GET /v1/deposit/addresses/{currency}/{platform}
        • GET /v1/deposit/currencies
          GET /v1/deposit/currencies
        • [Deprecated] GET /v1/deposit/currencies/{currency}
          [Deprecated] GET /v1/deposit/currencies/{currency}
        • GET /v1/deposit/currencies/{currency}/{platform}
          GET /v1/deposit/currencies/{currency}/{platform}
        • Terms of Deposit
          Terms of Deposit
        Внесение средств
      • Вывод средств
        • [Deprecated] GET /v1/withdraw/addresses/{currency}/{address}
          [Deprecated] GET /v1/withdraw/addresses/{currency}/{address}
        • GET /v1/withdraw/addresses/{currency}/{address}/{platform}
          GET /v1/withdraw/addresses/{currency}/{address}/{platform}
        • GET /v1/withdraw/currencies
          GET /v1/withdraw/currencies
        • [Deprecated] GET /v1/withdraw/currencies/{currency}
          [Deprecated] GET /v1/withdraw/currencies/{currency}
        • GET /v1/withdraw/currencies/{currency}/{platform}
          GET /v1/withdraw/currencies/{currency}/{platform}
        • Условия вывода
          Условия вывода
        Вывод средств
      • История операций
        История операций
      • Список платформ
        Список платформ
      • Коды ошибок
        Коды ошибок
      API шлюза
    • Токен доступа
      • Получить токен в интерфейсе
        Получить токен в интерфейсе
      • POST /v1/oauth2/token
        POST /v1/oauth2/token
      Токен доступа
    • Получить список сделок (Get Trades)
      Получить список сделок (Get Trades)
    • Годовая процентная ставка стейкинга (API)
      Годовая процентная ставка стейкинга (API)
    • Матчер
      • Протокол WX Network
        Протокол WX Network
      • Комиссия матчера
        Комиссия матчера
      • Установка матчера на Ubuntu из Deb-пакета
        Установка матчера на Ubuntu из Deb-пакета
      • Настройки матчера
        Настройки матчера
      • API Матчера
        • Правила валидации ордера
          Правила валидации ордера
        • Правила валидации ExchangeTransaction
          Правила валидации ExchangeTransaction
        API Матчера
      • WebSocket API Матчера
        • Ошибки и отладка
          Ошибки и отладка
        • Common Streams
          Common Streams
        WebSocket API Матчера
      Матчер
    API и библиотека
  • Глоссарий
    Глоссарий
      • English
      • Русский
      On this page
        • Первоначальное получение токена
          • Параметры запроса
          • Пример ответа
          • Параметры ответа
          • Пример JavaScript
          • Пример получения токена через Signer
          • Пример получения токена через Metamask Provider
        • Перевыпуск токена доступа
          • Параметры запроса
          • Пример ответа
          • Пример JavaScript

          # POST /v1/oauth2/token

          Возвращает токен доступа и токен обновления.

          После того как срок действия токена истек, вы можете получить новый токен, как описано в подразделе Перевыпуск токена доступа ниже.

          В запросе необходимо указать HTTP-заголовок Content-type: application/x-www-form-urlencoded.

          # Первоначальное получение токена

          POST /v1/oauth2/token
          Content-type: application/x-www-form-urlencoded
          
          {
            "grant_type": "password",
            "scope": "general",
            "username": "(string)",
            "password" "(string)",
            "client_id": "waves.exchange"
          }
          

          # Параметры запроса

          Имя параметра Описание
          grant_type Для получения токена в первый раз укажите password
          scope Укажите general
          username Публичный ключ пользователя (opens new window)
          password Сгенерируйте пароль следующим образом:
          1. Объедините символ chain ID (opens new window) со строкой client_id и с Unix-временем окончания срока действия токена (в секундах), используя разделитель ':'. Например, W:waves.exchange:1584651600.
          2. Преобразуйте полученную строку в последовательность байтов.
          3. Добавьте префикс [255, 255, 255, 1].
          Сгенерируйте Curve25519 (opens new window)-подпись байтов, используя приватный ключ (opens new window) пользователя.
          4. Объедините Unix-время окончания срока действия токена в секундах с подписью в кодировке base58, используя разделитель ':'. Например, 1584651600:3BU36da1h6Bzhs4tKcfkCsXWi4vEgP8eQD7rkGWJdxbRfNpky6p3p7mUJWEL9ejDsasS8nWu1g6tZpsX4.
          ⚠️ Срок действия токена не должен превышать неделю.
          См. также подраздел Пример JavaScript ниже.
          client_id Для Gateway API укажите waves.exchange

          # Пример ответа

          {
            "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWduYXR1cmUiOiI2MUppRFBQWUZya2pw...",
            "token_type": "bearer",
            "expires_in": 1584651600,
            "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWduYXR1cmUiOiI2MUppRFBQWUZya2pw..."
          }
          

          # Параметры ответа

          Имя параметра Описание
          access_token Токен доступа для использования в запросах к API
          token_type Тип токена, всегда bearer
          expires_in Время окончания срока действия токена: Unix-время в секундах
          refresh_token Токен обновления. После истечения срока действия токена доступа вы можете перевыпустить токен доступа с помощью токена обновления, см. подраздел Перевыпуск токена доступа ниже. Срок действия токена обновления по умолчанию 1 месяц.

          После истечения срока действия токена доступа вы можете обменять токен обновления на новый токен доступа, см. подраздел Обмен токена обновления на новый токен доступа ниже. |

          # Пример JavaScript

          В этом примере используется библиотека waves-transactions. См. документацию библиотеки (opens new window) на Github.

          import { libs } from "@waves/waves-transactions";
          
          const seed = "insert your seed here";
          const chain_code = "W"; // "T" для Testnet
          const client_id = "waves.exchange";
          const seconds = Math.round((Date.now() + 1000 * 60 * 60 * 24 * 7) / 1000); // Токен на неделю
          
          const bytes = [255, 255, 255, 1, ...libs.crypto.stringToBytes(`${chain_code}:${client_id}:${seconds}`)];
          const signature = libs.crypto.signBytes(seed, bytes);            
          
          fetch('https://api.waves.exchange/v1/oauth2/token', {
              method: 'POST',
              headers: {
                  'Content-type': 'application/x-www-form-urlencoded'
              },
              body: [
                  "grant_type=password",
                  "scope=general",
                  `username=${encodeURIComponent(libs.crypto.publicKey(seed))}`,
                  "password=" + encodeURIComponent(`${seconds}:${signature}`),
                  `client_id=${client_id}`
              ].join('&')
          });
          

          # Пример получения токена через Signer

          import { Signer } from '@waves/signer';
          import { ProviderWeb } from '@waves.exchange/provider-web';
          
          async function getToken() {
              const provider = new ProviderWeb(url, true);
              const signer = new Signer({ NODE_URL: node });
              signer.setProvider(provider);
          
              const client_id = "waves.exchange";
              const chain_code = "W";
              const seconds = Math.round((Date.now() + 1000 * 60 * 60 * 24 * 7) / 1000);
              const message = `${chain_code}:${client_id}:${seconds}`;
          
              const { publicKey } = await signer.login();
              const signature = await signer.signMessage(message);
              const url = `https://api.waves.exchange/v1/oauth2/token`;
              const data = await fetch(url, {
                  method: 'POST',
                  headers: {
                      'Content-type': 'application/x-www-form-urlencoded'
                  },
                  body: [
                      "grant_type=password",
                      "scope=general",
                      `username=${encodeURIComponent(publicKey)}`,
                      "password=" + encodeURIComponent(`${seconds}:${signature}`),
                      `client_id=${client_id}`
                  ].join('&')
              }).then(result => result.json());
          
             return data.access_token;
          }
          
          
          
          const token = await getToken();
          

          # Пример получения токена через Metamask Provider

          import { Signer } from '@waves/signer';
          import { ProviderMetamask } from '@waves/provider-metamask';
          import { wavesAddress2eth } from '@waves/node-api-js';
          
          
          async function getToken() {
              const chain_code = "W";
              const node = "https://nodes.wavesnodes.com";
              const provider = new ProviderMetamask({
                  wavesConfig: {
                      nodeUrl: node,
                      chainId: chain_code.charCodeAt(0)
                  }
              });
          
              const signer = new Signer({ NODE_URL: node });
              signer.setProvider(provider);
          
              const client_id = "waves.exchange";
              const seconds = Math.round((Date.now() + 1000 * 60 * 60 * 24 * 7) / 1000);
              const message = `${chain_code}:${client_id}:${seconds}`;
          
              const user = await signer.login();
              const ethereumAddress = wavesAddress2eth(user.address);
          
              const signature = await signer.signMessage(message);
              const url = `https://api.waves.exchange/v1/oauth2/token`;
              const data = await fetch(url, {
                  method: 'POST',
                  headers: {
                      'Content-type': 'application/x-www-form-urlencoded'
                  },
                  body: [
                      "grant_type=password",
                      "scope=general",
                      `username=${encodeURIComponent(ethereumAddress)}`,
                      "password=" + encodeURIComponent(`${seconds}:${signature}`),
                      `client_id=${client_id}`
                  ].join('&')
              }).then(result => result.json());
          
             return data.access_token;
          }
          
          
          const token = await getToken();
          

          # Перевыпуск токена доступа

          POST /v1/oauth2/token
          Content-type: application/x-www-form-urlencoded
          
          {
            "grant_type": "refresh_token",
            "scope": "general",
            "client_id": "waves.exchange",
            "refresh_token": "(string)"
          }
          

          # Параметры запроса

          Имя параметра Описание
          grant_type Для обмена токена обновления на токен доступа укажите refresh_token
          scope Укажите general
          client_id Для Gateway API укажите waves.exchange
          refresh_token Токен обновления. После истечения срока действия токена доступа вы можете обменять токен обновления на новый токен доступа

          # Пример ответа

          {
            "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWduYXR1cmUiOiI2MUppRFBQWUZya2pw...",
            "token_type": "bearer",
            "expires_in": 1584109637,
            "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWduYXR1cmUiOiI2MUppRFBQWUZya2pw..."
          }
          

          Параметры ответа такие же, как описано в подразделе Первоначальное получение токена выше.

          # Пример JavaScript

          const refresh_token = "insert your refresh token here";
          const client_id = "waves.exchange";
          
          fetch('https://api.waves.exchange/v1/oauth2/token', {
              method: 'POST',
              headers: {
                  'Content-type': 'application/x-www-form-urlencoded'
              },
              body: [
                  "grant_type=refresh_token",
                  "scope=general",
                  `refresh_token=${refresh_token}`,
                  `client_id=${client_id}`
              ].join('&')
          });
          
          Получить токен в интерфейсе
          Получить список сделок (Get Trades)
          Получить токен в интерфейсе
          Получить список сделок (Get Trades)