MiniBank Public API:

Это - публичное HTTP API для всех. Попробуйте его. В случае, если оно Вас заинтересовало, и Вы
настроены на серьезное сотрудничество, свяжитесь с нами. Для получения доступа к документации приватного API
пройдите по ссылке GET https://minibank.cc/prvapi/doc. Для просмотра документации приватного API 
и создания первого пользователя используйте login: guest, password: guest. Если Вы реально крупный клиент, у нас 
есть для Вас накопительная скидка, возможность доработки под нужды вашего конкретного проекта, endpoint в зоне
onion, приватный пул кошельков и т.д.

Все ответы сервера в формате json. Все положительные ответы имеют код "200" и поле "success" 
равное "true". Все отрицательные ответы имеют код "400" и поле "success" равное "false" и поле "error" 
c текстовым описанием ошибки.

Последняя версия мануала:
GET https://minibank.cc/pubapi.php?request=doc 

1. STATUS, Курс, комиссия и состояние обменного пункта

GET https://minibank.cc/pubapi.php?request=status&pair=RUR2BTC

Параметры:

pair - направление обмена, на данный момент доступно только RUR2BTC

Пример положительного ответа + комментарии:

{
    "success" : "true",                 *** прошел ли запрос, возможные значения - true/false ***
    "status" : 
    {
        "api_online" : "true",          *** работает ли в данный момент наше API, возможные значения - true/false *** 
        "pair" : "RUR2BTC",             *** направление обмена ***        
        "exchange_rate" : "120000",     *** цена одного биткоина по текущему курсу обмена в RUR, представляет собой целое число ***
        "fixed_fee" : "100",            *** фиксированная комиссия за обмен в RUR, идет на fee bitcoin сети, целое число ***
        "min_exchange" : "0.001",       *** минимальная сумма одного обмена в биткоинах, число с плавающей точкой ***
        "max_exchange" : "0.0124",      *** максимальная сумма одного обмена в биткоинах, число с плавающей точкой ***
        "timeout_min" : "120"           *** время в минутах на оплату заказа ***
    }
}

2. ORDER, Создание запроса на обмен QIWI -> BTC

POST https://minibank.cc/pubapi.php?request=order&pair=RUR2BTC&amount=0.5&wallet=1EZiZU6NNtBty6SXzf97C3waX6S1oGBGXT&force_exact_amount=False

Параметры:

pair - направление обмена, на данный момент доступно только RUR2BTC
amount - сколько нужно обменять, можно задать как сумму в BTC (пример: 0.012), так и в рублях (1000)
wallet - кошелек для получения криптовалюты
force_exact_amount - необязательный параметр, по умолчанию False. Если выставлено True, система
никогда не будет изменять величину суммы высылаемых BTC, даже при округлении вверх до 50р.Пример положительного ответа + комментарии:

{
    "success" : "true",                         *** прошел ли запрос, возможные значения - true/false ***
    "order" : 
    {
        "id" : "521",                           *** уникальный идентификатор обмена, представляет собой целое число ***
        "support_ticket" : "XXXXX.YYYYY"        *** идентификатор для обращения в поддержку в случае проблем с заказом ***
        "pair" : "RUR2BTC",                     *** направление обмена ***
        "status" : "new",                       *** статус обмена, возможные значение - new/payment_confirmed/btc_sent/timeout ***
        "amount" : "0.01",                      *** сколько BTC будет переведено Вам ***
        "wallet" : "+79991234567",              *** наш киви кошелек для перевода ***
        "price" : "2500",                       *** ВАЖНО: сколько переводить на киви кошелек в рублях, ОБЯЗАТЕЛЬНО ***
        "comment" : "0145",                     *** ВАЖНО: комментарий к переводу, ОБЯЗАТЕЛЬНО ***
        "user_wallet" : "1EZiZ...."             *** кошелек клиента для получения криптовалюты ***
    }
}

3. ORDER_STATUS, Опрос статуса уже созданного обмена

GET https://minibank.cc/pubapi.php?request=order_status&id=идентификатор_обмена

Параметры:

id - уникальный идентификатор обмена из запроса на обмен (endpoint ORDER), целое число

Пример положительного ответа + комментарии:

{
    "success" : "true",                         *** прошел ли запрос, возможные значения - true/false ***
    "order_status" : 
    {
        "id" : "521",                           *** уникальный идентификатор обмена, представляет собой целое число ***
        "pair" : "RUR2BTC",                     *** направление обмена ***
        "status" : "payment_confirm",           *** статус обмена, возможные значение - new/payment_confirmed/btc_sent/timeout ***
        "amount" : "0.01"                       *** сколько BTC будет переведено Вам ***
    }
}    

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

Стандартные коды ошибок API:

0 - OK. No error
1 - Unexpected API error
2 - No such API endpoint found, check URL please
3 - Missing API parameter, see API manual
4 - Invalid argument: only RUR2BTC currently supported for exchange pair
5 - API needs to be online for this operation
6 - Out of BTC, try again later
7 - Exchange limits exceeded
8 - Invalid order identifier
9 - Invalid Bitcoin wallet
10 - Wrong credentials!
11 - Action not authorized
    
Пример ответа сервера в случае ошибки:    
    
{
    "success" : "false",
    "error_code" : "1",
    "error_message" : "Unexpected API error"
}
    
Пример на Python 3.x:    
    
    import time
    import requests
    import json
    
    api_url = "https://minibank.cc/pubapi"
    
    # first request server status
    
    status_raw = requests.get("{0}/status?pair=RUR2BTC".format(api_url))
    status_request_res = json.loads(status_raw.text)
    
    if not bool(status_request_res["success"]):
        exit(status_request_res["error_message"])
        
     # check is api is online
    if not bool(status_request_res["status"]["api_online"]):
        exit("Exchange API offline")
        
    print("Exchanger status ok")    
        
    # ok, now we are making an order
    amount = 0.5 * (float(status_request_res["status"]["min_exchange"]) + 
                    float(status_request_res["status"]["max_exchange"]))
    wallet = '1EZiZU6NNtBty6SXzf97C3waX6S1oGBGXT'

    params = (('pair', 'RUR2BTC'), ('amount', amount), ('wallet', wallet))
    
    # making a post order request
    
    order_raw = requests.post("{0}/order".format(api_url), data=params)
    order_request_res = json.loads(order_raw.text)
    
    if not bool(status_request_res["success"]):
        exit(status_request_res["error_message"])
    
    # now we save ID and wait for user to send QIWI
    id = int(order_request_res["order"]["id"])

    comment = order_request_res["order"]["comment"]
    qiwi_wallet = order_request_res["order"]["wallet"]
    price = order_request_res["order"]["price"]
    
    print("Order made: QIWI: {0} Comment: {1}, Price: {2}".format(qiwi_wallet, comment, price))    

    # Some code that sends client (comment, qiwi_wallet, price)
    # .........................................................
    
    while True:
        time.sleep(10)
        
        order_status_raw = requests.get("{0}/order_status?id={1}".format(api_url, id))
        order_status_request_res = json.loads(order_status_raw.text)
        
        if not bool(order_status_request_res["success"]):
            exit(order_status_request_res["error_message"])
        
        order_info = order_status_request_res["order_status"]
        
        if order_info["status"].lower() == 'timeout':
             # client didn't send QIWI within given timeframe
            exit("Order timeout")
            
        if order_info["status"].lower() == 'payment_confirm':
             # exchanger confirmed QIWI payment from client
            print("Payment confirmed, waiting for BTC to be send")
             
        if order_info["status"].lower() == 'btc_sent':
             # exchanger confirmed QIWI payment from client
            break;
        
        print('Waiting')
        
     # If we are here, than bitcoin has been send to your wallet
     # They may not be confirmed yet however
    print("Success")