Клиент для Python3

Полная поддержка API биржи с помощью клиента на основе asyncio поверх WebSocket транспорта.
Примеры вызовов на python в этой документации сделаны на его основе. Подробности об использовании клиента и примеры по сылке.

URL: https://github.com/asfin/bitlish-client

JSON-API

URL: https://bitlish.com/api/v1

Название метода может быть передано:

  • в url: https://bitlish.com/api/v1/check_auth
  • в значении аргумента call: https://bitlish.com/api/v1?call=check_auth

GET - аргументы передаются в URI после символа «?»

curl -H "Content-Type: application/json" -X GET https://bitlish.com/api/v1/tickers;
{"btceur" : {"ask" : "391.2","bid" : "390.1","first" : "377.9000000000000000","last" : "391.1","max" : "391.1","min" : "377.9000000000000000","prc" : "0.0349","sum" : "3.2485"},"btcrub" : {"ask" : "30936.72","bid" : "30620.4","first" : "30620.4","last" : "30936.72","max" : "30936.72","min" : "30620.4","prc" : "0.0103","sum" : "0.0965"},"btcusd" : {"ask" : "436.9","bid" : "421.9700000000000000","first" : "421.9700000000000000","last" : "436.9","max" : "436.9","min" : "421.9700000000000000","prc" : "0.0354","sum" : "2.8649"}}
curl -H "Content-Type: application/json" -X GET -d '{"call":"tickers"}' https://bitlish.com/api/v1;
{"btceur" : {"ask" : "391.2","bid" : "390.1","first" : "377.9000000000000000","last" : "391.1","max" : "391.1","min" : "377.9000000000000000","prc" : "0.0349","sum" : "3.2485"},"btcrub" : {"ask" : "30936.72","bid" : "30620.4","first" : "30620.4","last" : "30936.72","max" : "30936.72","min" : "30620.4","prc" : "0.0103","sum" : "0.0965"},"btcusd" : {"ask" : "436.9","bid" : "421.9700000000000000","first" : "421.9700000000000000","last" : "436.9","max" : "436.9","min" : "421.9700000000000000","prc" : "0.0354","sum" : "2.8649"}}

POST - аргуметы передаются в теле запроса в формате JSON, в заголовке: ‘Content-Type’- ‘application/json’

curl -H "Content-Type: application/json" -X POST https://bitlish.com/api/v1/tickers;
{"btceur" : {"ask" : "391.2","bid" : "390.1","first" : "377.9000000000000000","last" : "391.1","max" : "391.1","min" : "377.9000000000000000","prc" : "0.0349","sum" : "3.2485"},"btcrub" : {"ask" : "30936.72","bid" : "30620.4","first" : "30620.4","last" : "30936.72","max" : "30936.72","min" : "30620.4","prc" : "0.0103","sum" : "0.0965"},"btcusd" : {"ask" : "436.9","bid" : "421.9700000000000000","first" : "421.9700000000000000","last" : "436.9","max" : "436.9","min" : "421.9700000000000000","prc" : "0.0354","sum" : "2.8649"}}
curl -H "Content-Type: application/json" -X POST -d '{"call":"tickers"}' https://bitlish.com/api/v1;
{"btceur" : {"ask" : "391.2","bid" : "390.1","first" : "377.9000000000000000","last" : "391.1","max" : "391.1","min" : "377.9000000000000000","prc" : "0.0349","sum" : "3.2485"},"btcrub" : {"ask" : "30936.72","bid" : "30620.4","first" : "30620.4","last" : "30936.72","max" : "30936.72","min" : "30620.4","prc" : "0.0103","sum" : "0.0965"},"btcusd" : {"ask" : "436.9","bid" : "421.9700000000000000","first" : "421.9700000000000000","last" : "436.9","max" : "436.9","min" : "421.9700000000000000","prc" : "0.0354","sum" : "2.8649"}}

WS-API

URL: wss://bitlish.com/ws

Все данные представляют собой объекты(ассоциативные массивы) закодированные в JSON и имеющие следующие поля:

Для вызова:
    token - токен
    call - название вызова,
    data - объект с параметрами вызова,
    mark - произвольный идентификатор посылки для сопоставления с ответом,

Для ответа:
    call - название вызова,
    data - объект с параметрами вызова,
    type - тип посылки (response/event)
    mark - идентификатор посылки
    error - Код ошибки (дополнительные данные об ошибке в поле данных)
    seen - помечен ли на сервере event как просмотренный (если были активные сессии)
    created - время создания объекта event
SEND: {"type":"request","token":null,"mark":"1456906008097043","data":null,"call":"tickers"}
RECV: {"call":"tickers","type":"response","data":{"btcusd":{"last":"436.9","prc":"0.0354","max":"436.9","sum":"2.8649","first":"421.9700000000000000","min":"421.9700000000000000"},"btcrub":{"max":"30936.72","sum":"0.0965","first":"30620.4","min":"30620.4","last":"30936.72","prc":"0.0103"},"btceur":{"prc":"0.0349","last":"391.1","first":"377.9000000000000000","min":"377.9000000000000000","sum":"3.2485","max":"391.1"}},"mark":"1456906008097043"}

Публичные вызовы


OrderBook

trades_depth - получение книги заявок - возвращает первые 100 заявок в каждой очереди

Параметр * Тип Описание
pair_id 0 String торговая пара

Запрос:

trades_depth '{ "pair_id": "btcusd" }'

Ответ:

{
  "ask" : [
     {
        "price" : "436.9",
        "volume" : "3.73"
     },
     {
        "price" : "439.9",
        "volume" : "0.12"
     },
     {
        "price" : "440",
        "volume" : "4.1"
     },
     ...
  ],
  "ask_end": "0",
  "bid" : [],
  "bid_end": "1",
  "last" : "1456906911797179",
  "pair_id" : "btcusd"
}

Ticker

tickers - краткая статистика по курсу за последние 24 часа

{
  "btceur" : {
     "ask" : "391.2",
     "bid" : "390.1",
     "first" : "377.9000000000000000",
     "last" : "391.1",
     "max" : "391.1",
     "min" : "377.9000000000000000",
     "prc" : "0.0349",
     "sum" : "3.2485"
  },
  "btcrub" : {
     "ask" : "30936.72",
     "bid" : "30620.4",
     "first" : "30620.4",
     "last" : "30936.72",
     "max" : "30936.72",
     "min" : "30620.4",
     "prc" : "0.0103",
     "sum" : "0.0965"
  },
  "btcusd" : {
     "ask" : "436.9",
     "bid" : "421.9700000000000000",
     "first" : "421.9700000000000000",
     "last" : "436.9",
     "max" : "436.9",
     "min" : "421.9700000000000000",
     "prc" : "0.0354",
     "sum" : "2.8649"
  }
}

OHLCV

ohlcv - статистика по курсу

Параметр * Тип Описание
time_range 0 Array of ( Micro ts ) период времени [от, до]

Запрос:

ohlcv '{ "time_range": [ "1456905508", null ] }'

Ответ:

{
  "list" : [
     {
        "data" : {
           "btcrub" : {
              "close" : "30936.7200000000000000",
              "close_ts" : "1456905570641364",
              "high" : "30936.7200000000000000",
              "low" : "30936.7200000000000000",
              "open" : "30936.7200000000000000",
              "open_ts" : "1456905508109709",
              "volume" : "0.0900000000000000"
           }
        },
        "from" : "1456902000",
        "to" : "1456905600"
     },
    ...
  ]
}

History

trades_history - информация о последний торгах на бирже

Параметр * Тип Описание
pair_id 1 String торговая пара

Запрос:

trades_history { "pair_id" : "btceur" }

Ответ:

{
  "list" : [
     {
        "amount" : 0.01,
        "created" : 1456392338877910,
        "dir" : "bid",
        "price" : 354.68
     },
     {
        "amount" : 0.01,
        "created" : 1456396242529690,
        "dir" : "bid",
        "price" : 354.46
     },
    ...
  ],
  "pair_id" : "btceur"
}

Общая информация

instruments - возвращает список с описаним используемых валют

{
  "btc" : {
     "icon" : "",
     "id" : "btc",
     "name" : "BTC",
     "prec" : 5,
     "symbol" : "฿"
  },
  "eur" : {
     "icon" : "# PAGE_CONTENT #quot;,
     "id" : "eur",
     "name" : "EUR",
     "prec" : 3,
     "symbol" : "€"
  },
  "rub" : {
     "icon" : "",
     "id" : "rub",
     "name" : "RUB",
     "prec" : 3,
     "symbol" : "₽"
  },
  "usd" : {
     "icon" : "",
     "id" : "usd",
     "name" : "USD",
     "prec" : 3,
     "symbol" : "# PAGE_CONTENT #quot;
  }
}

pairs - возвращает список с описанием используемых пар

Параметр * Тип Описание
currency 0 Str Отображать только пары с выбранной валютой (currency_id)
{
  "btceur" : {
     "currency_id" : "eur",
     "id" : "btceur",
     "item_id" : "btc",
     "name" : "BTC/EUR"
  },
  "btcrub" : {
     "currency_id" : "rub",
     "id" : "btcrub",
     "item_id" : "btc",
     "name" : "BTC/RUB"
  },
  "btcusd" : {
     "currency_id" : "usd",
     "id" : "btcusd",
     "item_id" : "btc",
     "name" : "BTC/USD"
  }
}

Персональные вызовы


Аутентификация

Для того чтобы производить операции с аккаунтом необходимо пройти аутентификацию, получить токен и передавать его в каждый API-вызов.

signin - вход - создать сессию, получить токен доступа

Параметр * Тип Описание
login 1 Str логин - номер телефона или email
passwd 1 Str пароль
token 0 Str токен

Запрос:

signin '{ "login" => "[email protected]", "passwd" => "mypass" }'

Ответ:

{
  "allowed_ips" : [],
  "ban_signin" : "0",
  "ban_withdraw" : "0",
  "confirmation_level" : "confirmed",
  "currencies" : [
     "rub",
     "btc",
     "ltc",
     "usd",
     "eur"
  ],
  "email" : "[email protected]",
  "ip" : "123.142.22.232",
  "is_guest" : "0",
  "lang" : "en",
  "level" : "user",
  "login" : "[email protected]",
  "mfa_provider" : "none",
  "mfa_signin" : "0",
  "mfa_withdraw" : "0",
  "notify" : "none",
  "password_outdated" : "0",
  "report" : "none",
  "timezone" : "Europe/London",
  "token" : "xxxxxxxxxxxxxxxxxxx",
  "trade_confirm" : "1",
  "uid" : "1001"
}

Возвращает данные из профиля ползователя, токен, IP-адресс и идентификатор пользователя

resign - получить информацию о сессии по токену. Возвращает то же самое, что и signin.

signout - закрыть сессию

Верификация

Чтобы отправить данные на верификацию надо закачать 2 документа (Удостоверение личности, подтверждение Адреса проживания) и выполнить api вызов set_identification. Требования к документам подробно изложены на страничке верификации https://bitlish.com/profile/verification.

Закачка файлов осуществляется с помощью POST запроса на адрес https://bitlish.com/imageservice/api/resizer/upload_image/ со следующими полями:

Параметр * Тип Описание
token 1 Str токен
document_type 1 Number тип документа
source_file 1 File фото или скан документа


Значения поля document_type :

Значение Тип документа
1 Удостоверение личности
2 подтверждение адреса проживания
5 другое, если требуется


Авторизация проходит с использованием HTTP-заголовка token, куда надо передать текущий токен.

Проконтролировать отправлены ли были файлы ранее можно с помощью GET запроса на адрес https://bitlish.com/imageservice/api/resizer/upload_image/uploaded_images_stat/. Для авторизации также необходимо передать заголовок token.


После отправки документов необходимо отправить значения для формы KYC с помощью api вызова set_identification. После успешной отправки данных статус Верификации сменится на pending. Паспортные данные и данные о месте проживания необходимо передавать в хешах id_doc и utility_bill. Все поля заполняются на английском языке.

Параметр * Тип Описание
id_doc 1 Hash of ( String => String ) Паспортные данные
utility_bill 1 Hash of ( String => String ) Подтверждение Адреса проживания
employment_status 1 Str трудоустройство (employed,self_employed,retired,student,other)
source_of_funds 1 Str источник дохода (salary,savings,investment,inheritance,other)
annual_income 1 Str годовой доход в USD (0-20000,20000-40000,40000-100000,100000+)


Значения полей раздела id_doc :

Параметр * Тип Разрешенные символы Описание
first_name 1 Str [a-zA-Z\s] Имя
last_name 1 Str [a-zA-Z\s] Фамилия
middle_name 0 Str [a-zA-Z\s] Отчество
birthdate 1 Str в формате DD.MM.YYYY Дата рождения
number 1 Str [a-zA-Z\d\s] Номер удостоверения личности
issue_date 1 Str в формате DD.MM.YYYY Дата выпуска удостоверения личности
expiry_date 0 Str в формате DD.MM.YYYY Дата выпуска удостоверения личности
issued_by 1 Str [a-zA-Z\d\s] Кем выдано удостоверение личности


Значения полей раздела utility_bill :

Параметр * Тип Разрешенные символы Описание
address 1 Str [a-zA-Z\d\s] Адрес
city 1 Str [a-zA-Z\d\s] Город
country 0 Str 2х буквенный код в формате ISO 3166-1 Страна
postal_code 1 Str [a-zA-Z\d\s] Индекс


Пример запроса set_identification

{
    "id_doc": {
        "number": "1111 222222",
        "issue_date": "11.11.2005",
        "expiry_date": "11.11.2055",
        "issued_by": "UPRAVLENIEM VNUTRENNIH DEL TSENTRALNOGO OKRUGA GORODA MOSKVA",
        "first_name": "IVAN",
        "last_name": "IVANOV",
        "birthdate": "11.11.1984"
    },
    "utility_bill": {
        "address": "Krasnaya ploshad 1",
        "city": "Moskva",
        "country": "RU",
        "postal_code": "123321"
    },
    "employment_status": "employed",
    "source_of_funds": "salary",
    "annual_income": "0-20000"
}

Торги и счета

Правила матча

Допустимая точность цены и суммы до 8 знака.

  1. Ордера исполняются в порядке поступления.
  2. В момент создания ордера средства блокируются на счете пользоватея и обмениваются в процессе исполнения.
  3. Ордер с более выгодной ценой исполняется раньше ( выгоднее на покупку - выше, на продажу - ниже ).
  4. Ордера с одинаковой ценой исполняются в порядке поступления (FIFO: раньше создан - раньше исполнится).
  5. При пересечении условий ордеров, сделка происходит по цене ордера выставленного раньше. ( купить по 100, продать по 90 - условия пересекаются )

Управление ордерами

Ордер - это заявка на выполнение торга.
В зависимости от указанных параметров можно создать ордера различных типов см.ниже.

Каждый ордер имеет следующие свойства:

Свойства определяемые пользователем:
    pair_id - торговая пара
    dir - направление торга ( bid - покупка, ask - продажа )
    amount - количество товара
    price - цена
    expire - время отмены тайм-лимит ордера ( не указано для ордеров другого типа )
    mark - произвольный строковый идентификатор ордера

Информационные свойства ордера:
    id - уникальный идентификатор
    created - время создания
    state - состояние ордера
    amount_done - количество товара, на которое ордер выполнен
    amount_free - оставшееся количество товара
    holded - количество средств заблокированных на счете пользователя
    send - количество списанных средств в процессе исполнения
    recv - количество полученных средств в процессе исполнения
    fee - количество средств потраченных на комиссию
    ofee - коэффициент комиссии для maker-ордеров ( 0.01 = 1% )
    mid_price - средняя цена по который выполнен ордер ( может быть исполнен с несколькими встречными ордера по разной цене )

Возможные состояния ордера:

  • new - не выполнен
  • part - частично выполнен
  • done - полностью выполнен ( или частично отменен )
  • cancel - полностью отменен

При каждой операции с ордером пользователю отправляется событие через api.
Все события имеют общий формат - хэш со следующими ключами:

  • ts - время создания события
  • action - операция выполненная над ордером
  • diff - хэш, содержащий изменения, произошедшие в параметрах ордера
  • order - текущее состояние ордера

Имена событий:

  • trade_order_create - ордер создан
  • trade_order_match - ордер исполнен ( частично или полностью - см. параметр state )
  • trade_order_cancel - ордер отменен
  • trade_order_cancel_expire - тайм-лимит ордер отменен по таймауту

Создание ордера

create_trade

Параметр * Тип Описание
pair_id 1 String торговая пара
dir 1 String направление торга ( bid - покупка, ask - продажа )
amount 1 Number количество товара для покупки/продажи
price 0 Number цена
expire 0 Micro timestamp время, когда ордер должен быть отменен
mark 0 String произвольный уникальный идентификатор ордера
part_match 0 Bool разрешить частичное исполнение ( если нет предложений )
wait_match 0 Bool может быть выставлен в стакан

Запрос:

create_trade '{ "pair_id": "btcusd", "dir": "ask", "amount": 0.001, "price": 700 }'

Ответ:

{
    "amount" => "10"
    "amount_done" => "0"
    "amount_free" => "10"
    "created" => "1442241329269148"
    "dir" => "ask"
    "expire" => null,
    "fee" => "0"
    "holded" => "10"
    "id" => "1442241329269190"
    "mark" => null,
    "mid_price" => "0"
    "ofee" => "0.001"
    "pair_id" => "btceur"
    "price" => "300"
    "recv" => "0"
    "send" => "0"
    "state" => "new"
    "type" => "trade"
    "user_id" => 1001
}

Событие создания ордера:

{
  "action" => "create"
  "diff" => {
              "amount" => "10"
              "amount_free" => "10"
              "holded" => "10"
              "state" => "new"
            },
  "order" => {
               "amount" => "10"
               "amount_free" => "10"
               "created" => "1442241329269148"
               "dir" => "ask"
               "id" => "1442241329269190"
               "mid_price" => "0"
               "pair_id" => "btceur"
               "price" => "300"
               "state" => "new"
               "type" => "trade"
             },
  "ts" => "1442241329299764"
}

Рыночный ордер

Ордер исполняется на указанную сумму по рыночной цене.
Не добавляется в стакан.
Для создания рыночного ордера достаточно не указывать price и expire

Лимитный ордер

Ордер с ограничением по цене.
Ордер исполняется на указанную сумму по цене не хуже указнной.
( продажа - не ниже указанной, покупка - не выше указанной )
Ожидает встречного ордера в стакане. Может быть отменен.
Для создания лимит ордера нужно указать price.

Тайм-лимит ордер

Ордер с ограничением по цене и времени ожидания.
Ордер исполняется на указанную сумму по цене не хуже указнной.
( продажа - не ниже указанной, покупка - не выше указанной )
Ожидает встречного ордера в стакане. Может быть отменен.
Если не исполнился, то будет автоматически отменен в указанный срок.
Для создания рыночного ордера нужно указать price и expire.

Отмена ордеров

Ордера могут быть отменены из следующих состояний:

  • new - ордер еще не исполнен, он полностью отменяется и переходит в состояние cancel.
  • part - ордер уже частично выполнен, он будет отменен на оставшуюся часть и перейдет в состояние done.

cancel_trade - отменить один ордер по id

Параметр * Тип Описание
id 1 String идентификатор ордера

Запрос:

cancel_trade { "id" : 1442241329269190 }

Ответ:

{
  "amount" => "0"
  "amount_done" => "0"
  "amount_free" => "0"
  "created" => "1442241329269148"
  "dir" => "ask"
  "expire" => null,
  "fee" => "0"
  "holded" => "0"
  "id" => "1442241329269190"
  "mark" => null,
  "mid_price" => "0"
  "ofee" => "0.001"
  "pair_id" => "btceur"
  "price" => "300"
  "recv" => "0"
  "send" => "0"
  "state" => "cancel"
  "type" => "trade"
  "user_id" => 1001
}

Евент отмены ордера:

{
  "action" => "cancel"
  "diff" => {
              "amount" => "10"
              "amount_free" => "10"
              "holded" => "10"
              "state" => "cancel"
            },
  "order" => {
               "amount" => "0"
               "amount_done" => "0"
               "amount_free" => "0"
               "created" => "1442241329269148"
               "dir" => "ask"
               "expire" => null,
               "fee" => "0"
               "holded" => "0"
               "id" => "1442241329269190"
               "mark" => null,
               "mid_price" => "0"
               "ofee" => "0.001"
               "pair_id" => "btceur"
               "price" => "300"
               "recv" => "0"
               "send" => "0"
               "state" => "cancel"
               "type" => "trade"
               "user_id" => 1001
             },
  "ts" => "1442251616720575"
}

cancel_trades_by_ids - отменить ордера по списку id

cancel_all_trades - отменить все свои ордера (без параметров)

Параметр * Тип Описание
ids 0 Array of ( Number ) список идентификаторов

Запрос:

cancel_trades_by_ids '{ "ids": [ 1456912337770541, 1456911814615664 ] }'

Ответ:

{
  "count" : 2
}

Список своих ордеров

list_active_trades - получить список своих активных оредров ( new и part )

Параметр * Тип Описание
pair_id 0 String торговая пара

Запрос:

list_active_trades '{ "pair_id": "btceur" }'

Ответ:

{
  "list" : [
     {
        "amount" : "0.001",
        "amount_done" : "0",
        "amount_free" : "0.001",
        "created" : 1456911814615598,
        "dir" : "ask",
        "expire" : null,
        "fee" : "0",
        "holded" : "0.001",
        "id" : 1456911814615664,
        "mark" : null,
        "mid_price" : "0",
        "ofee" : "0.001",
        "pair_id" : "btcusd",
        "price" : "700",
        "recv" : "0",
        "send" : "0",
        "state" : "new",
        "type" : "trade",
        "user_id" : 1001
     }
  ]
}

list_my_trades - получить список всех своих ордеров

Параметр * Тип Описание
id 0 String идентификатор ордера
dir 0 String направление ( ask - продажа, bid - покупка )
pair_id 0 String торговая пара
price 0 Array of ( Number ) интервал цены [ от, до ]
amount 0 Array of ( Number ) интервал количества [ от, до ]
expire 0 Array of ( Micro ts ) интервал времени отмены [ от, до ]
mark 0 String произвольный идентификатор указанный при создании
state 0 Array of ( String ) список сотояний ордера ( new/part/done/cancel )
sort 0 Array of ( Hash of ( String => String ) ) список хэшей, в которых ключ - это имя поля (id/created/amount/price/amount_done/state/expire), а значение - направление сортировки (asc/desc).
page 0 Number номер страницы
limit 0 Number количество записей на странице

Запрос:

list_my_trades '{ "pair_id": "btcusd", "state": ["cancel", "done"], "limit": 1 }

Ответ:

{
  "limit" : 1,
  "list" : [
     {
        "amount" : "0.98",
        "amount_done" : "0.98",
        "amount_free" : "0",
        "created" : 1455561804270658,
        "dir" : "ask",
        "expire" : null,
        "fee" : "0.3430000000000000",
        "holded" : "0",
        "id" : 1455561804270917,
        "mark" : null,
        "mid_price" : "350",
        "ofee" : "0.0010000000000000",
        "pair_id" : "btcusd",
        "price" : "350.0000000000000000",
        "recv" : "342.6570000000000000",
        "send" : "0.9800000000000000",
        "state" : "done",
        "type" : "trade",
        "user_id" : 1001
     }
  ],
  "page" : "1",
  "pages" : "4"
}

Получение информации о сделках

trade_details - детальная информация об ордере

Параметр * Тип Описание
id 1 String идентификатор ордера

Запрос:

trade_details '{ "id": 1455561804270917 }'

Ответ:

   {
      "amount" : "0.98",
      "amount_done" : "0.98",
      "amount_free" : "0",
      "created" : 1455561804270658,
      "deals" : [
         {
            "amount" : "0.98",
            "created" : 1455561804292327,
            "id" : 1455561804292336,
            "price" : "350",
            "state" : "done"
         }
      ],
      "dir" : "ask",
      "expire" : null,
      "fee" : "0.3430000000000000",
      "holded" : "0",
      "id" : 1455561804270917,
      "mark" : null,
      "mid_price" : "350",
      "ofee" : "0.0010000000000000",
      "pair_id" : "btcusd",
      "price" : "350.0000000000000000",
      "recv" : "342.6570000000000000",
      "send" : "0.9800000000000000",
      "state" : "done",
      "transfers" : [
         {
            "amount" : "0.98",
            "direction" : "hold",
            "ext_fee" : "0",
            "group_id" : "1455561804302553",
            "id" : "229",
            "instrument_id" : "btc",
            "notes" : "Hold funds on ask order: 0.98 BTC for 343 USD",
            "operation" : "trade_create",
            "order_id" : "1455561804270917",
            "our_fee" : "0",
            "ts" : "1455561804310062",
            "type" : "hold"
         },
         {
            "amount" : "342.657",
            "direction" : "both",
            "ext_fee" : "0",
            "group_id" : "1455561804302553",
            "id" : "230",
            "instrument_id" : "usd",
            "new_amount" : "0.9800000000000000",
            "new_instrument_id" : "btc",
            "notes" : "Sell 0.98 BTC ( for 343 USD )",
            "operation" : "trade_match",
            "order_id" : "1455561804270917",
            "our_fee" : "0.343",
            "ts" : "1455561804322570",
            "type" : "transfer"
         }
      ],
      "type" : "trade",
      "user_id" : 1001
   }

list_my_trads_from_ts - получить список сделок, произведенных после указнного момента времени

Запрос:

list_my_matches_from_ts '{ "pair_id": "btcusd", "from_ts": 1455561804000000, "limit": 1 }'

Ответ:

{
  "from_id" : null,
  "from_ts" : "1455561804000000",
  "limit" : "1",
  "list" : [
     {
        "amount" : "0.9800000000000000",
        "dir" : "ask",
        "id" : "1455561804292336",
        "order_id" : "1455561804270917",
        "pair_id" : "btcusd",
        "price" : "350.0000000000000000",
        "ts" : "1455561804292327"
     }
  ],
  "pair_id" : "btcusd"
}

Получение информации о счетах

Каждый пользователь имеет в системе несколько счетов - по одному для каждой валюты.
Счет разделен на 3 части:

  • funds - количество средств доступных для выполнения операций
  • holded - количество заблокированных средств ( в ордерах, выплатах, заблокировано администратором )
  • fee - общая сумма потраченная на выплату комиссии

При каждом изменении счета юзеру отправляется событие balances в виде хэша, ключи которого это валюты, а значение - хэши с информацией о счете.

Пример:

{
  "btc" : {
     "fee" : "0",
     "funds" : "999.02",
     "holded" : "0"
  },
  "eur" : {
     "fee" : "0",
     "funds" : "0",
     "holded" : "0"
  },
  "rub" : {
     "fee" : "0",
     "funds" : "1000",
     "holded" : "0"
  },
  "usd" : {
     "fee" : "0.343",
     "funds" : "1342.657",
     "holded" : "0"
  }
}

Так же информацию о счетах можно получить через api-вызов balance ( без параметров )

История изменения счетов

accounts_operations - получить историю операций со счетами c пагинацией ( не рекомендуется )

Параметр * Тип Описание
instrument_id 0 String название валюты (btc/usd/eur/rub)
type 0 String тип операции (transfer/withdraw/deposit/hold)
nohide 0 Bool (0/1) показать все операции, включая hold, которые по умолчанию не возвращаются
operation 0 Array of ( String ) список операций (trade_match/trade_create/trade_cancel/trade_cancel_expire/adm_withdraw/adm_deposit/adm_transfer/adm_hold/deposit/withdraw)
amount 0 Array of ( Number ) интервал количества [ от, до ]
ts 0 Array of ( Micro ts ) интервал времени отмены [ от, до ]
sort 0 Array of ( Hash of ( String => String ) ) список хэшей, в которых ключ - это имя поля (instrument_id/type/amount/ts), а значение - направление сортировки (asc/desc).
page 0 Number номер страницы
limit 0 Number количество записей на странице

Запрос:

accounts_operations '{ "page": 7, "limit": 2 }'

Ответ:

{
  "limit" : 2,
  "list" : [
     {
        "amount" : "0.001",
        "direction" : "hold",
        "ext_fee" : "0",
        "group_id" : "1456911400014321",
        "id" : "318",
        "instrument_id" : "btc",
        "notes" : "Hold funds on ask order: 0.001 BTC for 0.7 USD",
        "operation" : "trade_create",
        "order_id" : "1456911399985635",
        "our_fee" : "0",
        "ts" : "1456911400024950",
        "type" : "hold"
     },
     {
        "amount" : "-0.001",
        "direction" : "unhold",
        "ext_fee" : "0",
        "group_id" : "1456911673240700",
        "id" : "319",
        "instrument_id" : "btc",
        "notes" : "Release funds on request cancel",
        "operation" : "trade_cancel",
        "order_id" : "1456911399985635",
        "our_fee" : "0",
        "ts" : "1456911673241750",
        "type" : "hold"
     }
  ],
  "page" : 7,
  "pages" : "9"
}

list_accounts_operations_from_ts - получить историю операций со счетами от указанного времени

Параметр * Тип Описание
instrument_id 0 String название валюты (btc/usd/eur/rub)
type 0 String тип операции (transfer/withdraw/deposit/hold)
operation 0 Array of ( String ) список операций (trade_match/trade_create/trade_cancel/trade_cancel_expire/adm_withdraw/adm_deposit/adm_transfer/adm_hold/deposit/withdraw)
nohide 0 Bool (0/1) показать все операции, включая hold, которые по умолчанию не возвращаются
ts 0 Micro ts время от которого вывести записи
dir 0 String направление ( > - от указанного ts, < - до указанного ts )
limit 0 Number количество записей которые необходимо вернуть

Запрос:

list_accounts_operations_from_ts '{ "ts": 1456911400024950, "dir": "<", "limit": 2 }'

Ответ:

{
  "dir" : "<",
  "limit" : 2,
  "list" : [
     {
        "amount" : "342.657",
        "direction" : "both",
        "ext_fee" : "0",
        "group_id" : "1455561804302553",
        "id" : "230",
        "instrument_id" : "usd",
        "new_amount" : "0.9800000000000000",
        "new_instrument_id" : "btc",
        "notes" : "Sell 0.98 BTC ( for 343 USD )",
        "operation" : "trade_match",
        "order_id" : "1455561804270917",
        "our_fee" : "0.343",
        "ts" : "1455561804322570",
        "type" : "transfer"
     },
     {
        "amount" : "0.001",
        "direction" : "income",
        "ext_fee" : "0",
        "group_id" : "1454686743380838",
        "id" : "137",
        "instrument_id" : "ltc",
        "notes" : "deposit from payment system \"litecoin\", currency: ltc",
        "operation" : null,
        "order_id" : null,
        "our_fee" : "0",
        "ts" : "1454686743438505",
        "type" : "deposit"
     }
  ],
  "ts" : "1456911400024950"
}

trade_options - возвращает информацию про условия торгов

Ввод-вывод

Получение информации

list_paysystems - возвращает список доступных платёжных систем и информацию о лимитах.

{
  "paysystems" : [
     {
        "currency" : "btc",
        "deposit" : {
           "description" : "Payment confirmation generated by bitcoin network and may vary. The network tend to add 1 confirmation every 10 minutes.",
           "description_ru" : "Для подтверждения депозита мы ожидаем не менее 3-х подтверждений сети. Каждое подтверждение обычно занимает около 10 минут",
           "enabled" : "1",
           "fee" : null,
           "limits" : [
              {
                 "avail" : "1000",
                 "limit" : 1000,
                 "period" : 2592000,
                 "sum" : "0"
              }
           ],
           "nearest" : 0
        },
        "display_name" : "Bitcoin",
        "enabled" : 1,
        "max_payment_size" : null,
        "min_payment_size" : 0.0001,
        "name" : "bitcoin",
        "priority" : "10",
        "type" : "bitcoin:btc",
        "withdraw" : {
           "description" : "-",
           "description_ru" : "-",
           "enabled" : "1",
           "fee" : {
              "amount" : "0.001",
              "type" : "fixed"
           },
           "limits" : [
              {
                 "avail" : "1000",
                 "limit" : 1000,
                 "period" : 2592000,
                 "sum" : "0"
              }
           ],
           "nearest" : 0
        }
     },
    ...
  ]
}

list_payments - получение истории платежей с фильтрацией и сортировкой.

Параметр * Тип Описание
id 1 String идентификатор платежа
paysystem 1 Str платёжная система
currency 0 Str валюта
direction 0 Str напрвление (withdraw, deposit)
state 0 Str состояние (new,payed,done,rollback,error,need_check)
amount 0 Num,Num сумма
created 0 Num,Num время создания
confirms_cnt 0 Num количество подтверждений
page 0 Number номер страницы
limit 0 Number количество записей на странице
sort 0 Array of ( Hash of ( String => String ) ) список хэшей, в которых ключ - это имя поля (id/created/amount/price/amount_done/state/expire), а значение - направление сортировки (asc/desc).
list_payments '{ "limit": 1 }'
{
  "amount" : 0.708,
  "amount_f" : 0.708,
  "fee" : 0,
  "from_amount" : 0.709,
  "limit" : 1,
  "list" : [
     {
        "amount" : "0.099",
        "confirms_cnt" : "15870",
        "created" : "1454523392",
        "currency" : "ltc",
        "direction" : "deposit",
        "errcode" : null,
        "fee" : "0",
        "from_amount" : "0.099",
        "from_currency" : "ltc",
        "group_id" : null,
        "id" : "90",
        "invoice" : null,
        "mark" : null,
        "our_fee" : "0",
        "paysystem" : "litecoin:ltc",
        "state" : "done",
        "trust_level" : "-690",
        "txid" : "30b098dce558b87ff0de85d0eb477964482d6dfe737d3b2e4242ad1608fa1681",
        "updated" : null,
        "user_confirm" : "-1",
        "user_id" : "1001"
     }
  ],
  "our_fee" : 0.001,
  "page" : 1,
  "pages" : 6
}

Ввод

deposit - возвращает информацию необходимую для совершения депозита. При получении информации о депозите и последующем изменении статуса отправляются эвенты payment_info.
Для коинов is_invoice принудительно выдаёт новый адрес.

Parameter * Type Description
payment_method 1 Str тип платежа
currency 1 Str валюта
amount 0 Num сумма платежа
is_invoice 0 Bool получить новый инвойс

Запрос:

# python3
resp = yield from api.deposit({
    'payment_method': 'bitcoin',
    'currency': 'btc',
    'is_invoice': 1,
})
pprint(resp['data'])
# shell
curl https://bitlish.com/api/v1/deposit -w %{response_code} -H 'Content-Type: application/json' --data-raw '{"token": "fixed:...", "payment_method": "bitcoin", "currency": "btc"}'

Ответ:

{'account': '1248VjPfEaNchbXbW2uQ81AhmV3RVWgmuz',
 'amount': None,
 'currency': 'btc',
 'direction': 'deposit',
 'id': '1466067262102971',
 'invoice': None,
 'is_invoice': '0',
 'minimal_amount': None,
 'other_data': None,
 'payment_method': 'bitcoin',
 'paysystem': 'bitcoin:btc',
 'ps_type': None,
 'type': 'bitcoin',
 'user_id': '1001'
}

Вывод

create_template_wallet - валидирует данные кошелька, и в случае успеха создаёт и возвращает его идентифиактор id, который может быть использован для последующих выводов.
Обязательность параметров зависит от выбранного payment_method.

Параметр * Тип Описание
payment_method 1 Str тип платежа
account 1 Str номер счёта(адрес, номер телефона) для вывода
currency 0 Str валюта
exp_date 0 Str для выводов на карту: срок действия. Формат: ‘12/16’
name 0 Str имя держателя карты, или бенефициара
address 0 Str адрес
phone 0 Str номер телефона
bank_name 0 Str для банковских переводов: название банка
bank_iban 0 Str для банковских переводов: IBAN банка
bank_swift_bic 0 Str для банковских переводов: SWIFT код банка
user_notes 0 Str примечание к кошельку. 128 символов максимум

Запрос:

# python3
resp = yield from api.create_template_wallet({
    'payment_method': 'bitcoin',
    'account': '1248VjPfEaNchbXbW2uQ81AhmV3RVWgmuz',
})
pprint(resp['data'])
# shell
curl https://bitlish.com/api/v1/create_template_wallet -w %{response_code} -H 'Content-Type: application/json' --data-raw '{"token": "fixed:...", "payment_method": "bitcoin", "account": "1248VjPfEaNchbXbW2uQ81AhmV3RVWgmuz"}'

Ответ:

{'account': '1248VjPfEaNchbXbW2uQ81AhmV3RVWgmuz',
 'created': 1472645753,
 'enabled': 1,
 'id': '1472645753410160',
 'is_template': 1,
 'other_data': {},
 'supported_currencies': {'btc': 1},
 'supported_paysystems': {'bitcoin:btc': 1},
 'type': 'bitcoin',
 'updated': 1472645753,
 'user_id': '1001',
 'user_notes': None}

withdraw_by_id - создаёт запрос на вывод для выбранного кошелька. Возвращает список платежей, которые будут выполнены.

Параметр * Тип Описание
wallet_id 1 Str идентификатор кошелька полученный от вызова create_template_wallet
amount 1 Num сумма платежа
currency 1 Str валюта
mark 0 Str произвольный идентификатор платежа, гарантированно уникален для пользователя
autorounding 0 Bool округлять сумму с излишней точностью(напр. 1.256 EUR) автоматически

Запрос:

# python3
resp = yield from api.withdraw_by_id({
    'wallet_id': '1472645753410160',
    'amount': 0.01,
    'currency': 'btc',
})
pprint(resp['data'])
# shell
curl https://bitlish.com/api/v1/withdraw_by_id -w %{response_code} -H 'Content-Type: application/json' --data-raw '{"token": "fixed:...", "wallet_id": "1472645753410160", "amount": "0.01", "currency": "btc"}'

Ответ:

{'payments': [{'amount': '0.01',
               'amount_f': '0.009',
               'confirms_cnt': '0',
               'created': '1472648184',
               'currency': 'btc',
               'deposit_wallet_id': None,
               'direction': 'withdraw',
               'errcode': None,
               'fee': None,
               'from_amount': '0.01',
               'from_currency': 'btc',
               'group_id': None,
               'id': '5939',
               'invoice': '14726481845939',
               'mark': None,
               'our_fee': '0.001',
               'paysystem': 'bitcoin:btc',
               'state': 'new',
               'txid': None,
               'updated': None,
               'user_confirm': '-1',
               'user_id': '1001',
               'user_notes': None,
               'withdraw_wallet_id': '1472645753410160'}]}

withdraw - Создание запроса на вывод. Если в профиле включено двухфакторное подтверждение вывода, то после создания необходимо подтвердить запрос вызовом user_confirm_withdraw. Запрос будет выполнен после того, как будет одобрен оператором. При изменении статуса запроса отправляются эвенты payment_info.

Параметр * Тип Описание
payment_method 1 Str тип платежа
account 1 Str номер счёта(адрес, номер телефона) для вывода
amount 1 Num сумма платежа
currency 1 Str валюта
mark 0 Str произвольный идентификатор платежа, гарантированно уникален для пользователя
exp_date 0 Str для выводов на карту: срок действия. Формат: ‘12/16’
name 0 Str имя держателя карты, или бенефициара
address 0 Str адрес
phone 0 Str номер телефона
user_notes 0 Str комментарий к операции. 128 символов максимум
bank_name 0 Str для банковских переводов: название банка
bank_iban 0 Str для банковских переводов: IBAN банка
bank_swift_bic 0 Str для банковских переводов: SWIFT код банка

Запрос:

# python3
resp = yield from api.withdraw({
    'payment_method': 'bitcoin',
    'account': '1248VjPfEaNchbXbW2uQ81AhmV3RVWgmuz',
    'amount': 0.002,
    'currency': 'btc',
})
pprint(resp['data'])
# shell
curl https://bitlish.com/api/v1/withdraw -w %{response_code} -H 'Content-Type: application/json' --data-raw '{"token": "fixed:...", "payment_method": "bitcoin", "account": "1248VjPfEaNchbXbW2uQ81AhmV3RVWgmuz", "amount": "0.002", "currency": "btc"}'

Ответ:

{'payments': [{'amount': '0.002',
               'amount_f': '0.001',
               'confirms_cnt': '0',
               'created': '1472648916',
               'currency': 'btc',
               'deposit_wallet_id': None,
               'direction': 'withdraw',
               'errcode': None,
               'fee': None,
               'from_amount': '0.002',
               'from_currency': 'btc',
               'group_id': None,
               'id': '5940',
               'invoice': '14726489165940',
               'mark': None,
               'our_fee': '0.001',
               'paysystem': 'bitcoin:btc',
               'state': 'new',
               'txid': None,
               'updated': None,
               'user_confirm': '-1',
               'user_id': '1001',
               'user_notes': None,
               'withdraw_wallet_id': '1472645753410160'}]}

B-codes

Для созданных и активированных кодов доступна различная информация, т.е. нельзя получить информацию о действиях другого пользователя т.к. время создания/активации кода или идентификатор пользователя.

Поле direction определяет действие произведенное вами над кодом:

-1 - создание
1  - активация
0  - создание и активация

Создание

create_bcode - создать b-code.

Параметр * Тип Описание
instrument_id 1 String валюта
amount 0 Num сумма

Запрос:

# python3
resp = yield from api.create_bcode({
    'instrument_id': 'usd',
    'amount': 100,
})
pprint(resp['data'])
# shell
curl https://bitlish.com/api/v1/create_bcode -w %{response_code} -H 'Content-Type: application/json' --data-raw '{"token": "fixed:...", "instrument_id": "usd", "amount": 100}'

Ответ:

{'amount': '100',
 'code': 'B-USD-BBUKZ5-V6F9EP-7C4XFU-NMQSRD-4Z8PEP',
 'created': '1472654414548650',
 'direction': '-1',
 'id': '1',
 'instrument_id': 'usd'}

Активация

redeem_code - применить b-code

Параметр * Тип Описание
code 1 Str код активации

Запрос:

# python3
resp = yield from api.redeem_bcode({
    'code': 'B-USD-BBUKZ5-V6F9EP-7C4XFU-NMQSRD-4Z8PEP',
})
pprint(resp['data'])
# shell
curl https://bitlish.com/api/v1/redeem_bcode -w %{response_code} -H 'Content-Type: application/json' --data-raw '{"token": "fixed:...", "code": "B-USD-BBUKZ5-V6F9EP-7C4XFU-NMQSRD-4Z8PEP"}'

Ответ:

{'amount': '100.0000000000000000',
 'applied': '1472654364026125',
 'code': 'B-USD-BBUKZ5-V6F9EP-7C4XFU-NMQSRD-4Z8PEP',
 'created': '1472654319592708',
 'direction': '0',
 'id': '1',
 'instrument_id': 'usd'}

Получение информации

list_bcodes - получение информации о созданных и активированных кодах

Параметр * Тип Описание
id 0 Str идентификатор
code 0 Str код активации
instrument_id 0 Str валюта
created 0 Str время создания
amount 0 Str сумма
sort 0 Array of ( Hash of ( String => String ) ) список хэшей, в которых ключ - это имя поля (id/created/amount/instrument_id), а значение - направление сортировки (asc/desc).
page 0 Num номер страницы
limit 0 Num количество записей на странице

Запрос:

# python3
resp = yield from api.list_bcodes({
    'limit': 1,
})
pprint(resp['data'])
# shell
curl https://bitlish.com/api/v1/list_bcodes -w %{response_code} -H 'Content-Type: application/json' --data-raw '{"token": "fixed:...", "limit": 1}'

Ответ:

{'limit': 1,
 'list': [{'amount': '100.0000000000000000',
           'code': 'B-USD-BBUKZ5-V6F9EP-7C4XFU-NMQSRD-4Z8PEP',
           'created': '1472654414548650',
           'direction': '-1',
           'id': '1',
           'instrument_id': 'usd'}],
 'page': '1',
 'pages': '3'}