NAV Navbar
json python javascript go php

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

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

Change docs language: RU EN

Авторизируйтесь, что бы получить 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())
sign = hmac.new(secret_key.encode('utf-8'),
                "{}{}".format(timestamp, data)
                .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.info/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

Кошелёк

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

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

{
  "id": 123123,
  "amount": 0.1,
  "address": "35NjwZg8T4F12ESdEo3rQeYQ8ZiTyDYoTJ",
  "dest_tag": "",
  "currency": "BTC",
  "status": "pending",
  "blockchain_confirmations": 1,
  "blockchain_hash": "72648cefcc47b4371f28dc3328bc863918913eebf81b40d4a97d577b96c1ce53",
  "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 нет Метка для дальнейшей идентификации в личном кабинете

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

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

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

{
  "id": 123123,
  "amount": 0.1,
  "address": "rw2ciyaNshpHe7bCHo4bRWq6pqqynnWKQg",
  "dest_tag": "755785168",
  "label": "your_label",
  "currency": "XRP",
  "status": "completed",
  "blockchain_confirmations": 1,
  "blockchain_hash": "BC07C0937F2B12D8DF8F90B5A421957DC690DC8512F97925217726E6A28F0A93",
  "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

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

GET https://api.westwallet.info/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.info/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.info/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 символов)

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

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

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

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

HTTP запрос

GET /webhook/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.