NAV
json python javascript go php

Перед началом

Добро пожаловать в официальную документацию WestWallet API.

Change docs language: UA EN DE RU

Авторизируйтесь, что бы получить API-ключ в настройках профиля.

Готовые библиотеки для языков програмирования: Python JavaScript Golang PHP

Авторизация

import json
import hashlib
import hmac
import time
import requests

# Get transaction info
api_key = "your_public_key"
secret_key = "your_private_key"
data = {"id": 435}
timestamp = int(time.time())
if data:
    dumped = json.dumps(data, ensure_ascii=False)
else:
    dumped = ""
sign = hmac.new(secret_key.encode('utf-8'),
                "{}{}".format(timestamp, dumped)
                .encode('utf-8'), hashlib.sha256).hexdigest()
headers = {
    "Content-Type": "application/json",
    "X-API-KEY": api_key,
    "X-ACCESS-SIGN": sign,
    "X-ACCESS-TIMESTAMP": str(timestamp)
}
resp = requests.post("https://api.westwallet.io/wallet/transaction", 
                     data=json.dumps(data),
                     headers=headers)
print(resp.json())                     

WestWallet API ожидает получить в заголовках каждого вашего запроса X-API-KEY, X-ACCESS-SIGN и X-ACCESS-TIMESTAMP.

X-API-KEY - ваш публичный ключ;

X-ACCESS-TIMESTAMP - временная метка (используйте unix timestamp);

X-ACCESS-SIGN - HMAC-sha256-подпись тела запроса (составленная из строки, содержащей метку времени и JSON-представление данных тела запроса), подписанная вашим приватным ключём. Для GET запросов аналогично необходимо сформировать JSON-представление query-параметров.

Просмотрите пример, как сформировать строку для генерации подписи во вкладке примеров кода на python

Кошелёк

Данные про валюты

GET https://api.westwallet.io/wallet/currencies_data

Запрос для получения списка доступных валют и ограничений по ним.

HTTP запрос

GET /wallet/currencies_data

[
  {
    "name": "Bitcoin", 
    "address_regex": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34})|^(bc1([qpzry9x8gf2tvdw0s3jn54khce6mua7l]{39}|[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{59}))$", 
    "require_dest_tag": false, 
    "tickers": [
      "BTC",
    ], 
    "min_receive": 0.0005, 
    "min_withdraw": 0.0001, 
    "max_withdraw_per_transaction": 5, 
    "max_withdraw_transactions_per_day": 1000000,
    "active": true,
    "send_active": true,
    "receive_active": true
  }, 
  {
    "name": "USDT TRC-20", 
    "address_regex": "^[T][a-km-zA-HJ-NP-Z1-9]{25,34}$", 
    "require_dest_tag": false, 
    "tickers": [
      "USDTTRC",
    ], 
    "min_receive": 10, 
    "min_withdraw": 1, 
    "max_withdraw_per_transaction": 100000, 
    "max_withdraw_transactions_per_day": 1000000,
    "active": true,
    "send_active": true,
    "receive_active": true
  }
]

Вывод средств

POST https://api.westwallet.io/wallet/create_withdrawal

{
  "id": 123123,
  "amount": 0.1,
  "address": "35NjwZg8T4F12ESdEo3rQeYQ8ZiTyDYoTJ",
  "dest_tag": "",
  "currency": "BTC",
  "status": "pending",
  "blockchain_hash": "72648cefcc47b4371f28dc3328bc863918913eebf81b40d4a97d577b96c1ce53",
  "fee": "0.0001",
  "error": "ok"
}
# Send 0.1 ETH to 0x57689002367b407f031f1BB5Ef2923F103015A32
from westwallet_api import WestWalletAPI
from westwallet_api.exceptions import InsufficientFundsException, BadAddressException

client = WestWalletAPI("your_public_key", "your_private_key")
try:
    sent_transaction = client.create_withdrawal(
        "ETH", "0.1", "0x57689002367b407f031f1BB5Ef2923F103015A32"
    )
except InsufficientFundsException:
    # handle this case
    pass
except BadAddressException:
    # handle also this case
    pass
else:
    print(sent_transaction.__dict__)
const westwallet = require('westwallet-api');
const westwalletErrors = require('westwallet-api/lib/errors');

const publicKey = "yourPublicKey";
const privateKey = "yourPrivateKey";

let client = new westwallet.WestWalletAPI(
    publicKey, 
    privateKey
);

client.createWithdrawal("ETH", "0.1", "0x57689002367b407f031f1BB5Ef2923F103015A32")
.then((data) => {
    console.log(data);
}).catch((error) => {
    if (error instanceof westwalletErrors.InsufficientFundsError) {
        console.log("Insufficient funds");
    } else if (error instanceof westwalletErrors.BadAddressError) {
        console.log("Bad address regex");
    } else {
        console.log(error);
    }
});
package main

import (
    "fmt"
    westwallet "github.com/westwallet/westwallet-golang-api"
)

// Sending 0.1 ETH to 0x57689002367b407f031f1BB5Ef2923F103015A32
client := westwallet.APIClient{
    Key:      "your_public_key",
    Secret:   "your_private_key",
}

transaction, err := client.CreateWithdrawal(
    "ETH", "0.1", "0x57689002367b407f031f1BB5Ef2923F103015A32", "", ""
)

fmt.Println(err)
if err != nil {
    panic(err)
}
fmt.Println(transaction)
<?php
require_once 'vendor/autoload.php';

use WestWallet\WestWallet\Client;
use WestWallet\WestWallet\InsufficientFundsException;

$client = new Client("your_public_key", "your_private_key");

// Send 0.1 ETH to 0x57689002367b407f031f1BB5Ef2923F103015A32
try {
    $tx = $client->createWithdrawal("ETH", "0.1", "0x57689002367b407f031f1BB5Ef2923F103015A32");
    print(implode("|", $tx)."\n");
} catch(InsufficientFundsException $e) {
    print("You don't have enough funds to make this withdrawal"."\n");
}

Вывести средства из нужного вам кошелька.

HTTP запрос

POST /wallet/create_withdrawal

Post параметры

Параметр Пример Обязательный Описание
currency BTC да Валюта для отправки
amount 0.1 да Сумма для отправки
address 35NjwZg8T4F12ESdEo3rQeYQ8ZiTyDYoTJ да Адрес получателя
dest_tag 1390985919 нет Тэг назначения (необходим для некоторых валют)
description нет Метка для дальнейшей идентификации в личном кабинете
priority medium нет Приоритет транзакции – low (интервал отправки 24-48 часов, доступный для многих валют, уменьшенная комиссия которую можно обсудить при обращении в поддержку), medium или high. Стандартное значение – medium.

Отправка нескольких транзакций

POST https://api.westwallet.io/wallet/create_withdrawal/many

# Request
{
   "currency": "BTC",
   "priority": "high",
   "transactions": [
      {
         "address": "39iUBiSKuqUtMSSEgimuEkXyrmPP2YnuB5",
         "amount": "5",
         "description": "40124"
      },
      {
         "address": "3KJFvx88XUtqUgannLDZFm7XzHXACGLuJL",
         "amount": "0.015",
         "description": "40125"
      },
      {
         "address": "35NjwZg8T4F12ESdEo3rQeYQ8ZiTyDYoTJ",
         "amount": "0.010",
         "description": "40126"
      }
   ]
}

# Response
{
   "error": "ok",
   "results": [
      {
         "address": "39iUBiSKuqUtMSSEgimuEkXyrmPP2YnuB5",
         "amount": "5.00000000",
         "description": "40124",
         "error": "insufficient_funds"
      },
      {
         "address": "3KJFvx88XUtqUgannLDZFm7XzHXACGLuJL",
         "amount": "0.01500000",
         "blockchain_hash": "72648cefcc47b4371f28dc3328bc863918913eebf81b40d4a97d577b96c1ce53",
         "currency": "BTC",
         "error": "ok",
         "fee": "0.00027500",
         "id": 611438237,
         "status": "pending",
         "description": "40125"
      },
      {
         "address": "35NjwZg8T4F12ESdEo3rQeYQ8ZiTyDYoTJ",
         "amount": "0.01000000",
         "blockchain_hash": "72648cefcc47b4371f28dc3328bc863918913eebf81b40d4a97d577b96c1ce53",
         "currency": "BTC",
         "error": "ok",
         "fee": "0",
         "id": 611438238,
         "status": "pending",
         "description": "40126"
      }
   ]
}

Отправить несколько транзакций из нужного вам кошелька. При этом применяются скидки на комиссию сети.

Для второй и последующей транзакций применяется скидка 50% от фиксированной комиссии.

Первой транзакцией считается транзакция с самой большой суммой.

Метод работает только для валют с возможностью массовой отправки: BTC, BCH, BTG, BSV, ADA, DASH, DOGE, LTC, XMR, ZEC.

HTTP запрос

POST /wallet/create_withdrawal/many

Post параметры

Параметр Пример Обязательный Описание
currency BTC да Валюта для отправки
priority medium нет Приоритет транзакции – low (интервал отправки 24-48 часов, доступный для многих валют, уменьшенная комиссия которую можно обсудить при обращении в поддержку), medium или high. Стандартное значение – medium.
transactions да Массив (список) данных о транзакциях. Структура полей приведена ниже

Post параметры структуры transactions

Параметр Пример Обязательный Описание
amount 0.1 да Сумма для отправки
address 35NjwZg8T4F12ESdEo3rQeYQ8ZiTyDYoTJ да Адрес получателя
description нет Метка для дальнейшей идентификации в личном кабинете

Статус транзакции

Возможные статусы:

POST https://api.westwallet.io/wallet/transaction

{
  "id": 123123,
  "type": "send",
  "amount": 0.1,
  "address": "rw2ciyaNshpHe7bCHo4bRWq6pqqynnWKQg",
  "dest_tag": "755785168",
  "label": "your_label",
  "currency": "XRP",
  "status": "completed",
  "blockchain_confirmations": 1,
  "blockchain_hash": "BC07C0937F2B12D8DF8F90B5A421957DC690DC8512F97925217726E6A28F0A93",
  "fee": "0.0001",
  "error": "ok"
}
from westwallet_api import WestWalletAPI

client = WestWalletAPI("your_public_key", "your_private_key")
transaction = client.transaction_info(19)
print(transaction.__dict__)
const westwallet = require('westwallet-api');
const westwalletErrors = require('westwallet-api/lib/errors');

const publicKey = "yourPublicKey";
const privateKey = "yourPrivateKey";

let client = new westwallet.WestWalletAPI(
    publicKey, 
    privateKey
);

client.transactionInfo(1284).then((data) => {
    console.log(data);
}).catch((error) => {
    if (error instanceof westwalletErrors.TransactionNotFoundError) {
        console.log("Transaction not found");
    }
});
package main

import (
    "fmt"
    westwallet "github.com/westwallet/westwallet-golang-api"
)

client := westwallet.APIClient{
    Key:      "your_public_key",
    Secret:   "your_private_key",
}

transaction, err := client.TransactionInfo(145);
fmt.Println(err)
if err != nil {
    panic(err)
}
fmt.Println(transaction)
<?php
require_once 'vendor/autoload.php';

use WestWallet\WestWallet\Client;
use WestWallet\WestWallet\TransactionNotFoundException;

$client = new Client("your_public_key", "your_private_key");

try {
    $tx = $client->transactionInfo(134);
    print(implode("|", $tx)."\n");
} catch(TransactionNotFoundException $e) {
    print("Transaction not found"."\n");
}

Узнать статус заявки.

HTTP запрос

POST /wallet/transaction

Post параметры

Параметр Пример Обязательный Описание
id 123123 да ID транзакции внутри сервиса WestWallet

История транзакций

POST https://api.westwallet.io/wallet/transactions

{
  "error": "ok",
  "result": [{
    "id": 123123,
    "created_at": "2019-12-29 15:07:13",
    "updated_at": "2019-12-29 15:12:43",
    "type": "send",
    "amount": 0.1,
    "address": "rw2ciyaNshpHe7bCHo4bRWq6pqqynnWKQg",
    "dest_tag": "755785168",
    "label": "your_label",
    "currency": "XRP",
    "status": "completed",
    "description": "your custom description",
    "blockchain_confirmations": 1,
    "blockchain_hash": "BC07C0937F2B12D8DF8F90B5A421957DC690DC8512F97925217726E6A28F0A93",
    "fee": "0.0001"
  }]
}

Просмотреть историю транзакций.

HTTP запрос

POST /wallet/transactions

Post параметры

Параметр Пример Обязательный Описание
currency BTC нет Код валюты, для которой необходимо получить список транзакций. Если не указан - вы получите список транзакций для всех валют.
limit 10 нет Количество транзакций в ответ на запрос (не больше 100). Если не указано - по умолчанию - 10.
offset 20 нет Смещение
type send нет Тип транзакций: send или receive. Если не указано, то получите список всех.
order desc нет Порядок сортировки: desc - от новых транзакций к старым, asc - от старых к новым.
status pending нет Статус транзакции для фильтрации (pending или completed)

Баланс кошелька

GET https://api.westwallet.io/wallet/balance?currency=BTC

{
  "balance": 0.55,
  "currency": "BTC"
}
from westwallet_api import WestWalletAPI

client = WestWalletAPI("your_public_key", "your_private_key")
balance = client.wallet_balance("BTC")
print(balance.balance)
const westwallet = require('westwallet-api');
const westwalletErrors = require('westwallet-api/lib/errors');

const publicKey = "yourPublicKey";
const privateKey = "yourPrivateKey";

let client = new westwallet.WestWalletAPI(
    publicKey, 
    privateKey
);

client.walletBalance("BTC").then((data) => {
    console.log(data);
}).catch((error) => {
    if (error instanceof westwalletErrors.CurrencyNotFoundError) {
        console.log("No such currency");
    }
});
package main

import (
    "fmt"
    westwallet "github.com/westwallet/westwallet-golang-api"
)

client := westwallet.APIClient{
    Key:      "your_public_key",
    Secret:   "your_private_key",
}

balance, err := client.WalletBalance("BTC");
fmt.Println(err)
if err != nil {
    panic(err)
}
fmt.Println(balance)
<?php
require_once 'vendor/autoload.php';

use WestWallet\WestWallet\Client;
use WestWallet\WestWallet\CurrencyNotFoundException;

$client = new Client("your_public_key", "your_private_key");

try {
    $balance = $client->walletBalance("BTC");
    print(implode("|", $balance)."\n");
} catch(CurrencyNotFoundException $e) {
    print("No such currency"."\n");
}

Узнать баланс кошелька

HTTP запрос

GET /wallet/balance?currency=BTC

Query параметры

Параметр Пример Обязательный Описание
currency BTC да Валюта кошелька

Балансы всех кошельков

GET https://api.westwallet.io/wallet/balances

{
  "ETH": 3.22,
  "ETC": 34,
  "LTC": 40,
  "BTC": 1.11,
  "XLM": 319.11,
  "XMR": 15.12
}
from westwallet_api import WestWalletAPI

client = WestWalletAPI("your_public_key", "your_private_key")
balances = client.wallet_balances()
print(balances.__dict__)
const westwallet = require('westwallet-api');
const westwalletErrors = require('westwallet-api/lib/errors');

const publicKey = "yourPublicKey";
const privateKey = "yourPrivateKey";

let client = new westwallet.WestWalletAPI(
    publicKey, 
    privateKey
);

client.walletBalances().then((data) => {
    console.log(data);
}).catch((error) => {
    console.log(error);
});
package main

import (
    "fmt"
    westwallet "github.com/westwallet/westwallet-golang-api"
)

client := westwallet.APIClient{
    Key:      "your_public_key",
    Secret:   "your_private_key",
}

balances, err := client.WalletBalances();
fmt.Println(err)
if err != nil {
    panic(err)
}
fmt.Println(balance)
<?php
require_once 'vendor/autoload.php';

use WestWallet\WestWallet\Client;
use WestWallet\WestWallet\CurrencyNotFoundException;

$client = new Client("your_public_key", "your_private_key");

$balances = $client->walletBalances();
print(implode("|", $balances)."\n");

Узнать балансы всех кошельков

HTTP запрос

GET /wallet/balances

Адреса

Сгенерировать адрес

POST https://api.westwallet.io/address/generate

{
  "address": "rw2ciyaNshpHe7bCHo4bRWq6pqqynnWKQg",
  "dest_tag": "755785168",
  "currency": "XRP",
  "label": "your_label",
  "error": "ok"
}
from westwallet_api import WestWalletAPI

client = WestWalletAPI("your_public_key", "your_private_key")
address = client.generate_address("XRP", "https://yourwebsite.com/ipn_url", "your_address_label")
print(address.address, address.dest_tag)
const westwallet = require('westwallet-api');
const westwalletErrors = require('westwallet-api/lib/errors');

const publicKey = "yourPublicKey";
const privateKey = "yourPrivateKey";

let client = new westwallet.WestWalletAPI(
    publicKey, 
    privateKey
);

client.generateAddress("BTC", "https://yourwebsite.com/ipn_url", "your_address_label")
.then((data) => {
    console.log(data);
}).catch((error) => {
    if (error instanceof westwalletErrors.CurrencyNotFoundError) {
        console.log("No such currency");
    }
});

package main

import (
    "fmt"
    westwallet "github.com/westwallet/westwallet-golang-api"
)

client := westwallet.APIClient{
    Key:      "your_public_key",
    Secret:   "your_private_key",
}

address, err := client.GenerateAddress("BTC", "https://yourwebsite.com/ipn_url", "your_address_label")
if err != nil {
    panic(err)
}
fmt.Println(address.Address)
<?php
require_once 'vendor/autoload.php';

use WestWallet\WestWallet\Client;
use WestWallet\WestWallet\CurrencyNotFoundException;

$client = new Client("your_public_key", "your_private_key");

try {
    $address = $client->generateAddress("BTC");
    print(implode("|", $address)."\n");
} catch(CurrencyNotFoundException $e) {
    print("No such currency"."\n");
}

HTTP запрос

POST /address/generate

Post параметры

Параметр Пример Обязательный Описание
currency BTC да Валюта адреса, который вы собираетесь генерировать
ipn_url https://yourwebsite.com/payment_secret_token?tx_id=123321 нет Instant Payment Notification URL. На этот адрес вы получите уведомление как только кто-то зачислит средства на этот адрес
label tx54543 нет Укажите метку для адреса для дальнейшей идентификации (не более 30 символов)

Платёжная страница (инвойс)

POST https://api.westwallet.io/address/create_invoice

{
  "allowed_currencies_data": [{"address": "35NjwZg8T4F12ESdEo3rQeYQ8ZiTyDYoTJ",
                               "amount": 0.00211364,
                               "currency_code": "BTC",
                               "dest_tag": ""},
                              {"address": "rn97Zbg9V6hiqJoK6EQ8RtuaLUTYHSFXyw",
                               "amount": 0.02658667,
                               "currency_code": "XRP",
                               "dest_tag": "10000324245"}],
  "expire_at": "2022-01-31 19:36:14",
  "token": "0b4ab755b42b6ff7fcb01100e42ec3",
  "url": "https://westwallet.io/payment/0b4ab755b42b6ff7fcb01100e42ec3",
  "error": "ok"
}
<?php
require_once 'vendor/autoload.php';

use WestWallet\WestWallet\Client;
use WestWallet\WestWallet\InsufficientFundsException;

$client = new Client("your_public_key", "your_private_key");
$response = $client->createInvoice(array("BTC", "USDTTRC"), "100", "https://yourwebsite.com/payment_secret_token?tx_id=123321", true, "https://yourwebsite.com/thank_you", "Payment 1234", "1234", 15);
print(implode("|", $response)."\n");

HTTP запрос

POST /address/create_invoice

Post параметры

Параметр Пример Обязательный Описание
currencies ["BTC", "XRP"] да Список разрешённых криптовалют для оплаты.
amount 100 да Сумма зачисления. Если указано больше одной валюты в поле currencies, то сумма обязательна должна быть в USD.
amount_in_usd true нет Используйте это поле в случае, если необходимо указать сумму в USD, когда указана одна валюта в поле currencies. Это поле будет автоматически true, если указано более 1 валюты в поле currencies.
ipn_url https://yourwebsite.com/payment_secret_token?tx_id=123321 да Instant Payment Notification URL. На этот адрес вы получите уведомление как только кто-то зачислит средства на адрес, сгенерированный для инвойса
success_url https://yourwebsite.com/thank_you нет URL для переадресации после успешной оплаты
description Payment 1234 нет Описание платежа. Текстовая информация, которая будет отображаться на странице оплаты.
label 1234 нет Укажите метку для адреса для дальнейшей идентификации (не более 30 символов)
ttl 15 нет Время жизни заявки в минутах. Максимум 15 минут. После истечения этого времени на странице заявки перестанет отображаться интерфейс для оплаты (адреса, QR и т.д.).

Список транзакций платёжной страницы (инвойса)

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

GET https://api.westwallet.io/address/invoice_transactions

{
  "count": 1,
  "error": "ok",
  "result": [{"address": "5mpjDRgoRYRmSnAXZTfB2bBkbpwvRjobXUjb4WYjF225",
             "amount": "120",
             "blockchain_confirmations": 0,
             "blockchain_hash": "5RYQvquKnuEZyH3bumRqmnvwHsjTVgqFoBWc6jxyirDzsSjtgELRccnzoQJv3zdoPmR7xS657unUQhManbrttcQd",
             "created_at": "2023-07-31 13:04:12",
             "currency": "SOL",
             "description": null,
             "dest_tag": "",
             "fee": "0",
             "id": 763,
             "label": "434532",
             "status": "pending",
             "type": "receive",
             "updated_at": null}]
}

HTTP запрос

GET /address/invoice_transactions?token=80f1321011b280877959f241a0e60b

Query параметры

Параметр Пример Обязательный Описание
token 80f1321011b280877959f241a0e60b да Токен платёжной страницы (инвойса)

Уведомления о платежах

Примеры уведомления о платеже

{
  "id": 123123,
  "amount": 0.1,
  "address": "35NjwZg8T4F12ESdEo3rQeYQ8ZiTyDYoTJ",
  "dest_tag": "",
  "label": "312321",
  "currency": "BTC",
  "status": "completed",
  "blockchain_confirmations": 1,
  "fee": "0.0001",
  "blockchain_hash": "72648cefcc47b4371f28dc3328bc863918913eebf81b40d4a97d577b96c1ce53"
}

После того, как вы сгенерировали адрес, указав для него ipn_url и получили валюту на этот адрес, вы получите POST-запрос на этот url с такой структурой данных Возможные статусы в теле запроса: pending, completed.

Мы отправляем запрос с заголовком Content-Type: application/x-www-form-urlencoded .

HTTP запрос

GET /ipn/example

Возможные ошибки

В ответе на каждый запрос присутствует поле "error". Если "error" != "ok", тогда у вас одна из следующих ошибок:

Ошибки

WestWallet API использует такие коды ошибок для всех запросов:

Код ошибки Значение
400 Bad Request - Некорректно указанные поля запроса, расшифровка в поле errors.
401 Unauthorized - API-ключ некорректный или не указан вовсе.
404 Not Found - Ресурс не найден. Сверьтесь с документацией.
405 Method Not Allowed - Вы пытаетесь сделать запрос при помощи запрещённого HTTP-метода.
429 Too Many Requests - Слишком много запросов с вашей стороны.
500 Internal Server Error - Проблема на стороне нашего сервера. Пожалуйста, сообщите об этом нашей поддержке.

В случае успешного запроса вы получаете статус 200.