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.